问题标签 [postgresql-9.6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
323 浏览

postgresql - postgres 9.6 新的进度报告工具

阅读最近 Postgres 9.6 的发行说明,我发现了这个有趣的新功能

添加通用命令进度报告工具(Vinayak Pokale、Rahila Syed、Amit Langote、Robert Haas)

进一步阅读没有给我任何信息,但在 depesz的文章中有一些游戏。

当然,我首先想到的是——在某个地方是否也有关于已处理的内容(以及要处理的对象列表——我梦寐以求)的历史记录?或者这pg_stat_get_progress_info只是显示当前并且不知道 VACUUM 计划和过去?..

另一个问题 - 是否有接口可以为自己的流程使用该设施(报告、数据加载等)。

0 投票
1 回答
3547 浏览

postgresql - 为 postgres 设置 initdb 编码

当我尝试使用 init[db] 调用 pg_ctl 时,无法识别设置编码的选项:

这有改变吗?我使用了最新的 PostgreSQL 9.6(zip 下载,x64)。当我不使用 -E 开关时,一切正常,但数据库集群使用错误的编码初始化。

0 投票
0 回答
1158 浏览

postgresql - CTE 上的并行查询,用于在 PostgreSQL 中写入操作

PostgreSQL 9.6 发行说明

只有通过顺序扫描访问驱动表的严格只读查询才能被并行化。

我的问题是:如果 CTE(WITH子句)仅包含读取操作,但其结果用于提供写入操作,例如插入或更新,是否也不允许并行化顺序扫描?

我的意思是,由于 CTE 很像一个临时表,它只存在于当前执行的查询中,我可以假设它的内部查询可以利用 PostgreSQL 9.6 的全新并行 seq-scan 吗?或者,否则,它是否被视为使用子查询并且无法执行并行扫描?

例如,考虑这个查询:

该 foobarbaz 计算是否预计能够并行化,还是因为删除语句而被禁止?

如果不允许,我认为可以用CREATE TEMPORARY TABLE语句替换 CTE。但我想我会遇到与CREATE TABLE是写操作相同的问题。我错了吗?

最后,我可以尝试的最后一次机会是将其作为纯读取操作执行,并将其结果用作插入和/或更新操作的输入。在事务之外它应该工作。但问题是:如果读操作和插入/更新在abegincommit句子之间,无论如何都不允许?我了解它们是两个完全不同的操作,但在同一个事务和 Postgres 中。

需要明确的是,我担心的是我有大量难以阅读和难以重新设计的 SQL 查询,这些查询涉及多次顺序扫描和低性能函数调用,并且对两个表执行复杂的更改。整个过程在单个事务中运行,因为如果没有,发生故障时的混乱将完全无法恢复。

我希望能够并行化一些顺序扫描,以利用机器的 8 个 cpu 内核来更快地完成该过程。

请不要回答我需要完全重新设计那个烂摊子:我知道并且我正在努力。但这是一个伟大的项目,我们需要在此期间继续工作。

无论如何,任何建议将不胜感激。

编辑:

我添加了一份关于到目前为止我可以发现的内容的简短报告:

  • 正如@a_horse_with_no_name 在他的评论中所说(谢谢),CTE 和查询的其余部分是单个 DML 语句,如果它有一个写操作,即使在 CTE 之外,那么 CTE 也不能并行化(我也测试过) .

  • 此外,我发现这个wiki 页面比我在发行说明链接中找到的有关并行扫描的信息更简洁。

  • 多亏了那个 wiki 页面,我可以检查的一个有趣的点是我需要将所涉及的函数声明为并行安全。我做到了并且工作了(在没有写作的测试中)。

  • 另一个有趣的点是@a_horse_with_no_name 在他的第二条评论中所说的:使用 DbLink 执行纯只读查询。但是,对此进行一些调查后,我发现postgres_fdw(在 wiki 中明确提及为不支持并行扫描)使用更现代且符合标准的基础架构提供大致相同的功能

    • 而且,另一方面,即使它会起作用,我最终还是从事务外部获取数据,在某些情况下这对我来说是可以接受的,但我认为这不如一般解决方案好。
  • 最后,我检查了是否可以在事务内的只读查询中执行并行扫描,即使它稍后执行写操作(没有触发异常并且我可以提交)。

...总之,我认为我最好的选择(如果不是唯一的选择)是重构脚本,使其先将数据读取到内存中,然后在同一事务中执行写入操作。

它会增加 I/O 开销,但是,处理我管理的延迟会更好。

0 投票
0 回答
1001 浏览

postgresql - PostgreSQL 写放大

0 投票
2 回答
3559 浏览

postgresql - postgresql 错误:临时表上的“模式”不存在

我发现这个相当简单的 postgresql 9.6 函数

导致schema "" does not exist error. 确切的错误是:

并且在第二次和随后的执行中可靠地发生。剪切/粘贴上面的 SQL 块会重现错误……对我来说。如果您不是这种情况,则非常感兴趣。我有以下线索:

  • 错误消息中检测到的架构有所不同。大多数情况下它被报告为“”,但其他的如“0MA{Start of Text}”或来自事务中先前语句的一些sql语句/注释片段。听起来与内存指针有关。
  • 一旦进入,它将持续出错。
  • 我发现如果我创建或替换该函数,我将执行一次,然后错误状态将再次出现。
  • 我发现如果我打开一个新的 pgadminIII 窗口(不删除或重新创建),我将执行相同的一次,然后错误状态将再次出现......不管它是否在不同的窗口中出错。声音连接相关。
  • 我发现注释掉任何一个的创建idx_temp_data_to_index_thisthatidx_temp_data_to_index_unique解决问题。
  • 出现在“x86_64-pc-linux-gnu 上的 PostgreSQL 9.5.3,由 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16),64 位编译”和 9.6 实现中。
  • 如果上述函数是从另一个函数执行的,那么上面的 CREATE OR REPLACE FUNCTION 1-time resolve 对父函数不起作用,只有在替换子函数时才起作用。如果这发生在单独的 pgadmin 窗口中也没关系。P听起来既不是客户端也不是事务。

真的很欣赏你的想法。

0 投票
1 回答
1180 浏览

postgresql - psql:致命:角色“test”不存在

我是 postgres 的新手,在服务器重新启动后连接到数据库时遇到困难。我在操作系统用户测试下创建了一个数据库 pgdb。服务器重新启动后,我通过发出命令重新启动 pgsql

启动 postgresql-9.6 服务:[确定]

如果我只是发出 psql,我会被带到 psql 提示符,但这里的数据路径与我之前设置的不同。当我尝试以 postgres 用户身份连接到 pgdb 时,出现错误:

psql:致命:数据库“pgdb”不存在

当我尝试以测试用户身份连接时:

psql:致命:角色“test”不存在

请建议

0 投票
1 回答
2322 浏览

database - 为什么我不知道 PostGIS 是否正确安装在我的 PostgreSQL 数据库上?

我在PostgreSQL中绝对是新人,我正在按照本教程检查是否在我的PostgreSQL安装中安装了PostGIS扩展。

这是教程:https ://www.a2hosting.com/kb/developer-corner/postgresql/determining-the-postgresql-and-postgis-versions

我正在使用PostgreSQL 9.6.1

所以我可以通过命令行访问我的PostgreSQL,我执行了这个命令:

这是获得的输出:

C:\Users\Andrea>pasql -u admin 'pasql' 不是内部或外部命令、可运行程序或批处理文件。

所以我已经用标准用户完成了对数据库的访问,然后我执行了命令,但似乎PostGIS_full_version()函数不存在。

那么什么是手段?这意味着尚未安装简单的PoistGIS还是我做错了什么?(也许我必须在特定数据库上执行它?)

0 投票
1 回答
3317 浏览

postgresql - PostgreSql 9.6 中缺少 max_parallel_degree 配置参数

我不能set max_parallel_degree

文档:https ://wiki.postgresql.org/wiki/Parallel_Query

刚才我将我的 postgresql 测试数据库服务器从版本9.5.5更新到了9.6。服务器重新启动,启动并运行。根据文档,我应该能够为实际用户设置并行度,但此参数不在配置表中。

当我尝试set max_parallel_degree = 4;我得到这个:
错误:无法识别的配置参数“max_parallel_degree”

我的配置:
ubuntu 服务器(已更新),VirtualBox 机器中的 postgresql 9.6,分配了 6 个内核。
我的配置文件:/etc/postgresql/9.6/main/postgresql.conf 不包含带有“并行”字的行。
服务器版本 = 9.6.1;psql 版本 = 9.6.1

结果:

*此设置是我在运行 psql 后设置的。

我可以做些什么来启用在 PostgreSql 9.6 上运行的并行查询?

0 投票
1 回答
1008 浏览

macos - psql:致命:角色“vimarshchaturvedi”不存在。Postgres.app 安装

我正在使用 OS X El Capitan 版本 10.11.3 我下载了 Postgres 应用程序并运行了该应用程序。

顶部的大象图标显示版本 9.6.1.0(9.6.1.0)

当我单击“打开 psql”时,我的终端上会出现以下输出。

我的用户名在哪里。据我了解,该应用程序应该使用我的用户名和无密码创建一个角色。

我试着做:

这给出了同样的错误。

以下是我在尝试 SO 上发布的答案时得到的各种输出。

在搜索了更多之后,我运行了以下命令:

postgres 外壳打开了。谁能解释发生了什么?

0 投票
1 回答
25 浏览

sql - 每个样本的特定频率

这是我的桌子:

我需要计算具体的频率,我举个例子:

每行是一名患者,因此“chr1 123 AA”有 5 名患者,“chr1 123 AC”有 3 名。

我想知道A的频率

计算是:

对于 C:

我怎样才能在 SQL 中实现这一点是不是太复杂了?

Refalt是一varchar列,所以我需要拆分每个值以获得 ref 和 alt。

我知道这有点复杂,请向我询问更多详细信息。