标签: postgresql

解释 PostgreSql ssl_cipher 值: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH

在该postgresql.conf文件中,可以配置 的授权值ssl_cipher。但我找不到解释 ALL、ADH、LOW、EXP、MD5 和 STRENGTH 值对应的文档。

我猜MD5是指相应的MD5算法,但是其他值呢?我认为 LOW 不应该在生产环境中使用。

postgresql configuration ssl

1
推荐指数
1
解决办法
2123
查看次数

JOIN 或 WHERE 子句中的相等性?效率与风格

下面的两个查询中,哪个对 postgresql 来说最有效?并且在可读性等方面具有更好的风格。

区别在于语句的位置doctor.type != 'surgeon'

在 WHERE 子句中:

SELECT practice.name, doctor.name 
FROM doctor 
JOIN practice ON (doctor_code = code) 
WHERE doctor.name LIKE '%son' 
AND (doctor.type != 'surgeon');
Run Code Online (Sandbox Code Playgroud)

或者在 JOIN 子句中:

SELECT practice.name, doctor.name
FROM doctor
JOIN practice ON (doctor_code = code AND doctor.type != 'surgeon')
WHERE doctor.name LIKE '%son';
Run Code Online (Sandbox Code Playgroud)

postgresql join sql-standard

1
推荐指数
1
解决办法
1877
查看次数

PostgreSQL pg_upgrade --升级后链接模式性能问题

尝试将 PostgreSQL 从 9.0 升级到 9.3。我使用pg_upgrade该模式是因为与其他选项(例如不使用 )--link相比,停机时间非常短。pg_dumpallpg_upgrade--link

升级并执行 SQL 语句后检查执行时间。第一次需要近30分钟,第二次以后需要15分钟。在 9.0 中执行的相同查询甚至不需要整整 45 秒。

行数:150000 条记录使用相同的 postgresql.conf 文件 vaccumdb all:升级后完成

我还需要配置其他东西来提高性能吗?

它没有在文档中说明任何pg_upgrade --link会降低性能的地方。

执行升级
------------------
分析新集群中的所有行 ok
冻结新集群上的所有行即可
从新的 pg_clog 中删除文件 ok
将旧的 pg_clog 复制到新服务器即可
为新集群设置下一个事务 ID 确定
从新的 pg_multixact/offsets 删除文件 ok
可以在新集群上设置最旧的 multixact ID
重置 WAL 存档即可
在新集群中设置 freezexid 和 minmxid 计数器即可
在新集群中恢复全局对象 ok
向新集群添加支持功能 ok
在新集群中恢复数据库模式

我的数据库

在新集群中设置 minmxid 计数器即可
可以从新集群中删除支持功能
将“.old”后缀添加到旧的 global/pg_control 即可

如果要启动旧集群,则需要删除
/opt/postgres/9.0/data/global/pg_control.old 中的“.old”后缀。
由于使用了“link”模式,旧集群无法安全
一旦新集群启动就开始。 …

postgresql

1
推荐指数
1
解决办法
3541
查看次数

Postgresql 独特的历史

我正在从 postgresql 命令行工具运行多个命令,其中一些命令是重复运行的。在 Bash 中,历史函数为每组连续的相同命令保留一个命令,似乎 postgresql 命令行默认情况下不这样做。例如,如果我运行命令“a”一次,然后运行命令“b”100 次,则必须向上滚动 100 次才能再次运行命令“a”。这是一种对用户不友好的处理方式。是否有一个选项可以从 postgresql 命令行获得替代的、类似 bash 的功能,其中历史记录中只记住唯一的命令?

postgresql

1
推荐指数
1
解决办法
230
查看次数

如何从 UPDATE 子查询函数访问行值?

我需要UPDATE这样使用:

update offer set (bank, bank_id) = (cost, gid)
from (
select cost, osm_points.gid from pgr_kdijkstraCost(
  'SELECT gid as id, source, target, walk_cost as cost FROM ways',
  offer.vertice_id,
  array(select vertice_id from osm_points where super_type = 'bank'),
  false,false)
join osm_points on id2 = vertice_id
where cost != -1
and osm_points.super_type = 'bank'
order by cost
limit 1)t ;
Run Code Online (Sandbox Code Playgroud)

但我得到以下信息:

错误:对表“offer”的 FROM 子句条目的引用无效

提示:表“offer”有一个条目,但不能从查询的这部分引用它。

先感谢您

postgresql subquery update

1
推荐指数
1
解决办法
8961
查看次数

从 INSERT .. SELECT 中的 SELECT 表返回值

我有一个看起来像这样的表:

| column | def  |
| ------ | ---- |
| id     | uuid |
| status | int  |
| data   | text |
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询来复制一行(仅更改几列)并返回旧的(替换的)数据:

INSERT INTO tmp (status, data)
SELECT source.status, :data
FROM table AS source
WHERE id = :id
RETURNING id, source.data
Run Code Online (Sandbox Code Playgroud)

RETURNING只能访问插入行中的值,是否有其他方法可以做到这一点?

postgresql

1
推荐指数
1
解决办法
8713
查看次数

即使所有部分都未在 where 子句中列出,PostgreSQL 是否会使用复合索引的部分内容?

我显然可以凭经验对此进行测试,但我发现在没有加载虚假数据的情况下EXPLAIN,Postgres 只是加载了包含表和扫描的完整内存页面。我也没有在文档中找到答案。

我的问题是,如果我在一个表上有一个索引,例如(colA, colB)一个包含where colA = 'something'Postgres的查询是否会使用这个索引,即使colB它不在查询中?假设不colA存在包含的索引。这个索引在查询执行中很有用是有道理的,但我很难确定地跟踪答案。

(Postgres v12.x)

postgresql index index-tuning

1
推荐指数
1
解决办法
43
查看次数

PostgreSQL 中的办公时间

如何在 PostgreSQL 行中存储办公时间,以便我可以计算办公时间。

例子:

  • 我们周一至周五的营业时间为 9:00 至 18:00。
  • 星期六我们的营业时间为 10:00 至 15:00
  • 从 12 月 24 日到 12 月 31 日我们的营业时间为 10:00 到 13:00(但周六和周日不营业)
  • 12 月 25/26 日等银行假期关闭。
  • 以上所有规则有效期至 2021 年 12 月 31 日。
  • 从 2022 年 1 月 1 日开始,我们的营业时间为周一至周五的 10:00 至 18:00。星期六和以前一样开放。

我想将这些数据按行存储,以便我们可以为其开发接口。

然后需要一种使用行/规则来计算具体开放时间的方法。

在这种情况下,不同的时区并不重要。

我使用 PostgreSQL 12.6 版。但如果需要,我可以升级到更新的版本。

postgresql datetime date-math

1
推荐指数
1
解决办法
50
查看次数

测量 PostgreSQL 等待锁的时间

我想弄清楚PostgreSQL在一段时间内等待锁所花费的时间(在这段时间内,PostgreSQL服务了很多请求)。

我知道的

PostgreSQL 系统表pg_locks显示一些信息。喜欢:

SELECT * FROM 
    pg_locks         pl   LEFT JOIN 
    pg_stat_activity psa
ON pl.pid = psa.pid;
Run Code Online (Sandbox Code Playgroud)

但是我仍然无法弄清楚它在锁上花费了多长时间。

为什么我问这个问题

我发现当我增加 PostgreSQL 的并发性时(例如,增加每个收集的并行工作线程数、最大并行工作线程数或其他一些配置),我的 100 秒多线程 TPC-C-like 工作负载变得更慢(即,更低的吞吐量)。所以我想弄清楚这是否是因为争用过多。

类似的答案

对于 SQL Server:如何在没有分析器的情况下查看查询花费了多长时间等待锁定?

postgresql performance concurrency metadata locking

1
推荐指数
1
解决办法
53
查看次数

SELECT 中的廉价函数如何使整个查询变慢?

我将 Postgres 13.3 与内部和外部查询一起使用,它们都只产生一行(只是一些关于行数的统计数据)。

我不明白为什么下面的 Query2 比 Query1 慢得多。它们基本上应该几乎完全相同,最多可能只有几毫秒的差异......

查询 1:需要 49 秒

WITH t1 AS (
        SELECT
            (SELECT COUNT(*) FROM racing.all_computable_xformula_bday_combos) AS all_count,
            (SELECT COUNT(*) FROM racing.xday_todo_all) AS todo_count,
            (SELECT COUNT(*) FROM racing.xday) AS xday_row_count
        OFFSET 0 -- this is to prevent inlining
)

SELECT
            t1.all_count,
            t1.all_count-t1.todo_count AS done_count,
            t1.todo_count,
            t1.xday_row_count
FROM t1;
Run Code Online (Sandbox Code Playgroud)

查询 2:需要 4 分 30 秒

我只添加了一行:

WITH t1 AS (
        SELECT
            (SELECT COUNT(*) FROM racing.all_computable_xformula_bday_combos) AS all_count,
            (SELECT COUNT(*) FROM racing.xday_todo_all) AS todo_count,
            (SELECT COUNT(*) …
Run Code Online (Sandbox Code Playgroud)

postgresql cte parallelism functions postgresql-performance

1
推荐指数
1
解决办法
160
查看次数