我正在尝试查询 125GB Postgres 数据库中的几个表。我发现很难快速返回结果!
即使找到一列的唯一行也需要 10 多分钟。我使用命令行或 PHPMyAdmin 之类的工具来触发查询,等待时间保持不变。
例如:
SELECT COUNT (DISTINCT column_name) FROM table_name;
Run Code Online (Sandbox Code Playgroud)
我担心如果在这些表上使用连接操作,这个等待时间会显着增加并且会更加痛苦。
任何人都可以提出什么可能是快速恢复统计数据的可能解决方案?
postgresql performance count distinct postgresql-performance
我有一个 PostgreSQL 设置,有一个主站和三个从站。它被配置为流式复制。
现在,我只想使用pglogical将几个表从主服务器复制到分析服务器。为此,我们需要启用逻辑wal_level. 那么如何在不破坏现有复制的情况下启用它呢?
我有带有递归外键的表。它只是层次树结构:
CREATE TABLE tree (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
value INTEGER NOT NULL,
tree_id SMALLINT NOT NULL CHECK (tree_id > CAST(0 AS SMALLINT)),
parent_id INTEGER REFERENCES tree ON DELETE RESTRICT ON UPDATE RESTRICT,
EXCLUDE (tree_id WITH =) WHERE (parent_id IS NULL) -- allow only one root within tree
);
Run Code Online (Sandbox Code Playgroud)
如何拒绝插入非空parent_id和不同的记录tree_id?即外键parent_id只能引用id同一个内的主键tree_id。
最近我被告知,自从启用pg_stat_statements,可用磁盘空间正在迅速下降。我不认为这是由那个引起的,但我想知道:启用会pg_stat_statements减少磁盘空间吗?多少?
我向这样的某些列添加了 NOT NULL 约束,希望命令非常快,因为NOT VALID. 但是,大约需要 60-100 秒,并且似乎一直锁定表(基于在此期间失败的其他事情)。这是在一个大约有 8,600,000 行的表上。为什么会这样?执行 4 个命令而不是 1 个命令会更好吗?
Postgres 12
ALTER TABLE my_table
ADD CONSTRAINT my_table_column1_not_null CHECK (column1 IS NOT NULL) NOT VALID,
ADD CONSTRAINT my_table_column2_not_null CHECK (column2 IS NOT NULL) NOT VALID,
ADD CONSTRAINT my_table_column3_not_null CHECK (column3 IS NOT NULL) NOT VALID,
ADD CONSTRAINT my_table_column4_not_null CHECK (column4 IS NOT NULL) NOT VALID;
Run Code Online (Sandbox Code Playgroud) 我正在尝试对 Postgres 数据库进行未来验证,以便将其转移到 AWS Aurora。
我正在使用指南扩展名uuid-ossp。
是否可以向 AWS Aurora 添加 PostGres 扩展?
我特别感兴趣的是该扩展是否uuid-ossp可以在 Aurora 中使用。
我曾经问过性能问题,人们会告诉我 PostgreSQL 自动将足够小的表完全保存在 RAM 中,以免给 HDD 带来压力,从而实现“小表”的超快读写,即很少更容易适合可用 RAM(或分配给 PG 的内容)的行。
这对我来说很有意义,让我很高兴,因为我可以在并行运行的脚本之间有效地进行通信,而不会给我可怜的 HDD/SSD 带来压力并堵塞所有资源。
但后来我突然想到:这怎么可能?PG 怎么可能将一个表全部保存在 RAM 中,无论它有多小,而不会丢失数据完整性?
如果它不是一直写入永久存储,如果突然断电,或者软件崩溃,或者在运行时发生其他一些灾难,它怎么可能恢复?我想得越多,这对我来说就越不重要。
我能想到的唯一答案是:不,它实际上并没有这样做。如果 PG 从不(或很少)将数据写入永久存储,我看不到任何可能的方式来避免丢失数据。
如果这是可能的,但只有在为表格或设置启用某种标志后,我才想知道该标志/设置。我想为仅包含“内部通信”数据的表启用此功能,该数据类型除了作为主动运行脚本的“公共数据存储”之外没有任何价值。
我正在尝试计算两个坐标之间的距离并根据一些条件获取一些信息。一个类似的带有 'have' 子句的查询在 MySQL 中工作。但是为什么它在 PostgreSQL 中不起作用呢?
这是我的查询:
SELECT *, ( 6371 * acos( cos( radians(latitude) ) * cos( radians( latitude1 ) ) *
cos( radians( longitude1 ) - radians(longitude) ) + sin( radians(latitude) ) *
sin( radians( latitude1 ) ) ) ) AS distance from table WHERE
verified=true AND best_for LIKE '%xyz%' AND uuid NOT IN (SELECT uuid::uuid FROM table2 WHERE
from_date BETWEEN '2020-12-17 06:30'::date AND '2020-12-18 12:30'::date AND
to_date BETWEEN '2020-12-17 06:30'::date AND '2020-12-18 12:30'::date AND )
HAVING …Run Code Online (Sandbox Code Playgroud) postgresql postgresql-9.6 postgresql-performance column-alias
我有一个简单的架构和 MWE 查询。
架构:
CREATE TABLE ttable (
tcol Numeric(19,4)
)
Run Code Online (Sandbox Code Playgroud)
询问:
INSERT INTO ttable (tcol) VALUES ('123.45678');
SELECT * FROM ttable;
Run Code Online (Sandbox Code Playgroud)
结果:
123.4568
在这种情况下,我失去了精度。我输入了五位小数,但 Postgres 自动四舍五入。我希望这是一个错误,或者至少是我可以检测到的某种警告,以便我可以告诉用户精度损失。
我怎样才能做到这一点?
编辑:
这个问题显然不是这个问题的重复。在那个问题中,用户正在使用一个客户端应用程序,该应用程序对低于存储精度的值进行四舍五入。我的问题是关于 Postgres 本身对数据进行四舍五入以适合,而不是客户端显示。对于那些比这两个问题的标题看得更远的人来说,这将是显而易见的。
postgresql ×10
constraint ×2
alter-table ×1
column-alias ×1
count ×1
decimal ×1
distinct ×1
foreign-key ×1
locking ×1
performance ×1
recursive ×1
replication ×1
tree ×1