问题标签 [postgresql-13]
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.
postgresql - 如何从 c 扩展内部执行选择语句
在官方文档https://www.postgresql.org/docs/13/xfunc-c.html的帮助下,我设法获得了一个 c 扩展来编译和运行。
现在我没有在示例中看到提供了一种执行select
c 扩展内部的方法。一般来说,我不知道在哪里可以找到有关如何在 c 扩展中执行任何“正常”sql 语句的文档。
postgresql - Postgres 2 节点集群设置
我想为 postgres 设置 2 个节点集群。如何为 2 节点集群配置主节点和备份节点我需要知道最好的方法以及必要的配置。
postgresql - PostgreSQL:`新的。`AFTER TRIGGER` 被触发时返回 `NULL`
问题描述:
大家好,我有这张桌子:
我在上面声明了一个TRIGGER
:
和一个TRIGGER FUNCTION
:
一切正常,触发器正常触发,但没有UPDATE
在桌子上完成ORDINE
(第 12 行)。
我的经历(并尝试过):
我尝试放置一些打印说明以查看查询是否有效:
但输出返回插入的新行:
有空值:
所以UPDATE
“失败”是因为没有ORDINE
匹配NULL
值的行:
鳕鱼 | PrezzoTotale | 数据采集器 | 代码客户端 | 依赖鳕鱼 |
---|---|---|---|---|
12345 | 默认 (0.0) | 2020-12-12 | 00000 | 99999 |
显然问题可能与插入的行有关,可能吗?
我的期望:
在INSERT
我用这种方式匹配ORDINE.PrezzoTotale
的每个项目的正确总价更新列之后:COMPORDINE
COMPORDINE.CodOrdine = ORDINE.CodOrdine
鳕鱼 | PrezzoTotale | 数据采集器 | 代码客户端 | 依赖鳕鱼 |
---|---|---|---|---|
12345 | 1.80 | 2020-12-12 | 00000 | 99999 |
非常感谢任何人提前
[编辑#1]:
如所问,这是输出\d compordine
:
[编辑#2]:
所以,我做了其他几次尝试来寻找解决方案(剧透警报:未找到解决方案);我所做的是创建另一个函数和触发器,它只是在另一个名为的表上NEW.<column>
的语句之后打印值(我怀疑所有这些问题都只与表有关,但我错了),这是代码:INSERT
CLIENTE
COMPORDINE
输出返回:
虽然它应该是:
我根本不明白为什么,不应该NEW
以AFTER INSERT TRIGGER
这种方式返回值?:
事件 | OLD |
NEW |
---|---|---|
INSERT |
NULL |
新纪录 |
DELETE |
旧唱片 | NULL |
UPDATE |
原始记录 | 更新记录 |
postgresql - 我的 postgresql docker 容器正在使用所有的 ram 并且表现得很奇怪
我在 2GO digitalOcean 服务器上使用 docker compose 来部署我的应用程序,但我注意到 postgresql 容器正在使用他可用的所有 ram!这是不正常的,我想知道如何解决这个问题..?所以我进入容器的日志(docker logs postgres),我发现了这个:
我没想到在“数据库准备好接受连接”之后会有日志,就像我没有在容器中安装软件包一样,但我使用的是官方图像,所以我认为它应该可以工作......
帮你帮我哈哈:
我的码头工人撰写文件:
以及那里的 docker stats 输出:
如果你有想法!提前感谢:)
postgresql - 在 Postgres 13.1 中禁用逻辑复制语句的日志记录
我有一个从 postgres 读取逻辑复制消息的简单过程。此过程每秒运行一次,并在 postgres 日志中生成大量消息,例如:
我已经使用以下设置配置了日志记录:
但是,仍然会产生逻辑复制日志。
是否有禁用这些消息的设置?我可以使用 sed 或类似的东西,但更喜欢内置解决方案。
postgresql - 使用终端将 .db 文件导入到 postgresql
我在 ubuntu 上,我安装了 Postgresql 13。我有一个名为 (order.db) 的文件,它实际上是一个包含几个表的数据库。我想将整个(order.db)导入具有相同数据库名称的postgres,当然还有数据。有没有办法使用终端来做到这一点?任何命令?
order.db 文件是在 sqlite3 与 c++ 协作的帮助下创建的。Order.db 在我项目的早期阶段与 postgresql 无关。我只想将此(order.db)文件作为数据库导入我的postgres。
postgresql - PostgreSQL:甚至读取访问更改数据文件磁盘导致使用 pgbackrest 进行大型增量备份
我们正在使用 pgbackrest 将我们的数据库备份到 Amazon S3。我们每周进行一次完整备份,每隔一天进行一次增量备份。我们的数据库大小约为 1TB,完整备份约为 600GB,增量备份也约为 400GB!
我们发现即使是对数据库的读访问(纯选择语句)也会影响底层数据文件(在 /usr/local/pgsql/data/base/xxxxxx 中)的变化。这会导致大量增量备份以及 Amazon S3 上的非常大的存储(成本)。
通常具有低索引名称的文件(例如 391089.1)在读取访问时会发生变化。
在更新时,我们会看到一个或多个文件的变化——索引可能与表中行的年龄相关。
更多事实:
- Postgres 版本 13.1
- 数据库在 docker 容器中运行(docker 版本 20.10.0)
- 操作系统是 CentOS 7
我们在多台服务器上看到了这种现象。
有人可以解释一下,为什么 postgresql 会更改纯读访问的数据文件?我们在没有任何其他资源访问数据库的情况下在纯数据库上进行了测试。
postgresql - 如何自定义 postgres 以在服务器之间共享多个数据目录中的只读表
问题陈述:我必须开发一个解决方案,其中单个源填充一个表。一旦表格被填充,它被认为是只读的,然后我们对其运行许多只读查询。这样的只读表是由多次模拟运行生成的:每个模拟填充一个独立的表,这意味着没有对表的交叉写入。但是,只读查询可以在单个或多个表上执行。在我的环境中,我有很多机器来运行模拟,我不能使用这些机器来将 postgres 计算场作为云解决方案。所以我不能使用我的机器来运行无休止的 postgres 服务器作业,因为该解决方案的目的是。
我的想法是:第 1 阶段:用于填充表的临时服务器+客户端:在本地计算机上启动服务器+客户端,填充表并停止服务器+客户端。数据目录托管在中央文件系统(例如 NFS)中。第 2 阶段:用于从第 1 步查询现在只读表的临时服务器+客户端:在本地计算机上启动服务器+客户端,运行只读查询并停止服务器+客户端。为了实施第 2 阶段,我将:
- 创建一个新的临时空数据目录
- 从查询所需的每个 data-dirtable 文件(包括其索引文件)到 ad-hoc data-dir 创建一个软链接。请注意,多个数据目录中的文件可以链接到临时数据目录。
- 根据上述软链接更新 ad-hoc data-dir 中的 postgress 目录表
- 为了保证只读表文件不会被修改,我将实现一个 table-am(访问方法),它只注册与运行只读查询相关的 table-am 回调函数。由于可以在每个表上运行多个查询,因此可以同时运行阶段 2 中描述的客户端-服务器的多个实例。
有什么想法吗?它可以工作吗?我关心的是 stage2#4 中描述的过程:我真的可以依靠运行只读查询的回调函数不在后台更新只读表文件吗?开发和维护可持续解决方案的任何其他建议?
谢谢,毛兹
sql-update - 同一表中一列与另一列的批量更新
我正在使用 postgresql 13.1。我正在尝试用同一表的另一列更新表的一列。它不够快。因为我在表中有数百万条记录并且我已经在我试图更新的列上建立了索引,所以需要永远更新。这是查询。
UPDATE tbl t1 SET col_1 = to_tsvector(t2.col_2) FROM tbl t2;
col_1 上的索引。有人可以提供更快的更好解决方案吗?
提前致谢。
postgresql - 在 PostGIS Docker 映像本身中找不到“$libdir/postgis-3”
听起来 PostGIS 本身无法在... PostGIS Docker 映像中找到。因此,我想我一定是在某个地方错了,但我无法弄清楚。这是我每次基于以下 Dockerfile 构建和启动容器时遇到的错误:
这是生成此错误的 Dockerfile:
我去了那儿; PostgreSQL 12 和 PostGIS 3.0.1:错误:无法访问文件“$libdir/postgis-3”:Linux 上没有这样的文件或目录,但我真的不知道为什么我应该按照建议在图像中安装 PostGIS应该是 PostGIS-ready... 有人对正在发生的事情以及如何解决它有任何暗示吗?