问题标签 [postgresql-10]

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 回答
1640 浏览

database - 字符串值中带逗号的 COPY 命令 - Postgresql 10

我正在尝试将 dat 文件的内容复制到 PostgreSQL 中的表中,但出现错误。dat 文件有以下内容:

表架构:

我运行以下查询:

但得到以下错误

甚至尝试过

仍然是同样的错误....有人可以帮我将dat文件的内容复制到数据库吗?

谢谢

0 投票
5 回答
8397 浏览

postgresql - postgresql pg_dump 没有模式名称

pg_dump 10.3 版开始将模式名称显式添加到表名称中。那么以前是什么

就是现在

你怎么能关掉它?我的问题是,我将它转储到一个没有架构名称的 mariadb 中。

0 投票
2 回答
8985 浏览

postgresql - Postgres pg_dump 版本不匹配...即使版本相同

我正在尝试从最近更新到 10.1 的 Amazon RDS 中转储 Postgres 数据库。为此,我从enterprisedb.com ( http://get.enterprisedb.com/postgresql/postgresql-10.1-1-linux-x64-binaries.tar.gzpg_dump ) 下载10.1,但是当我尝试使用它时,我得到了以下错误:

这之前工作得很好,当 RDS 有 9.6 版并且我使用pg_dump9.6(从同一位置下载)时。

我尝试了更新版本的 pg_dump(10.2 和 10.3),但得到了相同的错误(这是有道理的,因为这些更新版本实际上与 RDS 版本不匹配)。

我还检查了pg_dump我的服务器上没有安装其他设备(Ubuntu 15.04 - 我知道我应该更新......等待 18.04),找到一个并删除它,但得到同样的错误。

这里可能是什么问题?

0 投票
2 回答
913 浏览

postgresql - Posgres 10:在不可变函数中“欺骗”now()。一个安全的想法?

我的应用程序向白水划船者报告降雨和流量信息。Postgres 是我的数据存储,用于以 15 分钟为间隔的仪表读数。随着时间的推移,这些表变得相当大,并且 Postgres 10 中范围分区的可用性激励我离开我的共享托管服务并在 Linode 从头开始​​构建服务器。在我将读数分成 2 周的块后,我对这些大表的查询变得更快。几个月后,我检查了查询计划,非常惊讶地发现在查询中使用 now() 会导致 PG 扫描我分区表上的所有索引。有没有搞错?!?!分区数据的目的不是为了避免这种情况吗?

这是我的设置:我的分区表

我每两周创建一次分区,所以到目前为止我有大约 50 个分区表。我的分区之一:

然后每个分区在 gauge_id 和 reading_time 上建立索引

我有很多疑问,比如

正如我所提到的,postgres 会为每个“子”表扫描 reading_time 上的所有索引,而不是仅查询在查询范围内具有时间戳的子表。如果我输入文字值(例如 precip.reading_time > '2018-03-01 01:23:00')而不是 now(),它只会扫描相应子表的索引。我已经阅读了一些内容,并且我知道 now() 是易变的,并且规划者不会知道查询执行时的值是什么。我还读到查询计划很昂贵,因此 postgres 缓存计划。我可以理解为什么 PG 被编程来做到这一点。但是,我读到的一个反驳论点是,重新计划的查询可能比最终忽略分区的查询便宜得多。我同意——在我的情况下可能就是这种情况。

作为一种变通方法,我创建了这个函数:

注意 IMMUTABLE 语句。现在,当发出类似的查询时

select * from stream where gauge_id = 2142 and reading_time > hours_ago2(-3) and reading_time < hours_ago2(0)

PG 只搜索存储该时间范围内数据的分区表。这是我一开始设置分区时的目标。嘘。但这安全吗?查询计划器是否会缓存 hours_ago2(-3) 的结果并在接下来的几个小时内一遍又一遍地使用它?缓存几分钟就好了。同样,我的应用程序报告降雨和流量信息;它不处理金融交易或任何其他“关键”类型的数据处理。我已经测试过像 select hours_ago2(-3) 这样的简单语句,它每次都会返回新值。所以看起来很安全。但真的是这样吗?

0 投票
1 回答
1576 浏览

postgresql - 从 JSON 数组中提取元素并将它们作为连接字符串返回

PostgreSQL 10 表包含 JSON 数据,例如(这里是SQL Fiddle):

如何仅提取“字母”值并将它们连接到一个字符串,如

我想最后我应该使用ARRAY_TO_STRING函数,但是使用哪个JSON 函数将“字母”值提取到数组中?

更新:

在非常有用的 PostgreSQL 邮件列表中也得到了提示:

0 投票
0 回答
105 浏览

postgresql - 冗余 LIMIT 子句修改结果

我从 postgres 看到了非常奇怪的结果。有谁知道这怎么会发生?我有一个复杂的查询,我们称它为 A:

行数少于 100000,因此 LIMIT 应该无效。但不知何故它确实如此。

顺便说一句,LIMIT 的原因是该查询来自自动插入限制的 BI 工具。我们在 BI 工具中看到了错误的数字,我已将其缩小到这一点。

这是postgres 10.1版

0 投票
3 回答
2608 浏览

sql - STRING_AGG 忽略 PostgreSQL 中的 GROUP BY

我为我的问题准备了一个SQL Fiddle -

在一个 2 人文字游戏中,我将玩家和他们的游戏存储在 2 个表中:

放置移动的字母块以及生成的单词和分数存储在另外 2 个表中:

在这里,我用包含一个游戏和 2 个玩家(Alice 和 Bob)的测试数据填充上面的表格:

他们的互换招式如下,有时一个招式可以产生2个字:

正如您在上面看到的,该tiles列始终是一个 JSON 对象列表。

但我只需要检索对象的单个属性:letter.

所以这是我的 SQL 代码(用于在特定游戏中显示玩家移动的 PHP 脚本):

不幸的是,它没有按预期工作。

尽管我试图GROUP BY mid

截屏

有没有办法用mid(又名移动ID)分割结果字符串?

更新:

我的问题不在于排序。我的问题是我得到了 2 个大字符串,而我希望有多个字符串,每个移动 id 一对(又名mid)。

这是我的预期输出,有人对如何实现它有建议吗?

更新#2:

我遵循了 Laurenz 的建议(谢谢!这里是SQL Fiddle):

但是由于某种原因,“单词(分数)”条目被乘以:

截图 2

0 投票
2 回答
6814 浏览

postgresql - 在 PostgreSQL 10 中手动创建用于发布的复制槽

我正在尝试从我的 PostgreSQL 数据库中获取某些表的更新流。获取所有更新的常规方式如下所示:

您创建一个逻辑复制槽

并使用pg_recvlogical或进行特殊的 SQL 查询连接到它。这允许您以 json 格式从数据库中获取所有操作(如果您使用了 wal2json插件或类似插件),然后对这些数据执行任何您想要的操作。

但是在 PostgreSQL 10 中,我们有发布/订阅机制,它允许我们只复制选定的表。这非常方便,因为没有发送很多无用的数据。该过程如下所示:

首先,您创建一个出版物

然后您从另一个数据库订阅该出版物

这会在后台在主数据库上创建一个复制槽,并开始监听更新并将它们提交到第二个数据库上的相同表中。如果您的工作是复制一些表,但想为我的东西获取原始流,这很好。

正如我所提到的,CREATE SUBSCRIPTION查询是在后台的主数据库上创建一个复制槽,但是如何在没有订阅和第二个数据库的情况下手动创建一个?这里的文档说:

为了使这个工作,单独创建复制槽(使用函数 pg_create_logical_replication_slot 和插件名称 pgoutput)

根据文档,这是可能的,但pg_create_logical_replication_slot只会创建一个常规的复制槽。pgoutput插件负责所有的魔法吗?如果是,那么就无法使用其他插件wal2json,例如出版物。

我在这里想念什么?

0 投票
3 回答
11137 浏览

postgresql - PostgreSql : ERROR: relation "sequence" does not exist while restoring from dump file

I get the following error while restoring database from dump file on server:

ERROR: relation "table_id_seq" does not exist
LINE 1: SELECT pg_catalog.setval('table_id_seq', 362, true);

  • my local psql version is 10.2
  • server psql version is 9.6.8

Here is my dump command:

Here is my restore command on server:

Please help, Thanks.

0 投票
1 回答
312 浏览

postgresql - postgresql 10 日期范围约束

我想在 postgresql 10 中进行日期范围约束。在 postgresql 9.6 中,这有效:

但是在 postgresql 10 中,我收到了这个错误:
functions in index expression must be marked IMMUTABLE

我怎样才能使这个约束起作用?