问题标签 [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.
database - 字符串值中带逗号的 COPY 命令 - Postgresql 10
我正在尝试将 dat 文件的内容复制到 PostgreSQL 中的表中,但出现错误。dat 文件有以下内容:
表架构:
我运行以下查询:
但得到以下错误
甚至尝试过
仍然是同样的错误....有人可以帮我将dat文件的内容复制到数据库吗?
谢谢
postgresql - postgresql pg_dump 没有模式名称
pg_dump 10.3 版开始将模式名称显式添加到表名称中。那么以前是什么
就是现在
你怎么能关掉它?我的问题是,我将它转储到一个没有架构名称的 mariadb 中。
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_dump
9.6(从同一位置下载)时。
我尝试了更新版本的 pg_dump(10.2 和 10.3),但得到了相同的错误(这是有道理的,因为这些更新版本实际上与 RDS 版本不匹配)。
我还检查了pg_dump
我的服务器上没有安装其他设备(Ubuntu 15.04 - 我知道我应该更新......等待 18.04),找到一个并删除它,但得到同样的错误。
这里可能是什么问题?
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) 这样的简单语句,它每次都会返回新值。所以看起来很安全。但真的是这样吗?
postgresql - 从 JSON 数组中提取元素并将它们作为连接字符串返回
PostgreSQL 10 表包含 JSON 数据,例如(这里是SQL Fiddle):
如何仅提取“字母”值并将它们连接到一个字符串,如
我想最后我应该使用ARRAY_TO_STRING函数,但是使用哪个JSON 函数将“字母”值提取到数组中?
更新:
在非常有用的 PostgreSQL 邮件列表中也得到了提示:
postgresql - 冗余 LIMIT 子句修改结果
我从 postgres 看到了非常奇怪的结果。有谁知道这怎么会发生?我有一个复杂的查询,我们称它为 A:
行数少于 100000,因此 LIMIT 应该无效。但不知何故它确实如此。
顺便说一句,LIMIT 的原因是该查询来自自动插入限制的 BI 工具。我们在 BI 工具中看到了错误的数字,我已将其缩小到这一点。
这是postgres 10.1版
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):
但是由于某种原因,“单词(分数)”条目被乘以:
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
,例如出版物。
我在这里想念什么?
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.
postgresql - postgresql 10 日期范围约束
我想在 postgresql 10 中进行日期范围约束。在 postgresql 9.6 中,这有效:
但是在 postgresql 10 中,我收到了这个错误:
functions in index expression must be marked IMMUTABLE
我怎样才能使这个约束起作用?