标签: postgresql

如何从庞大的 postgres 数据库中查询结果?

我正在尝试查询 125GB Postgres 数据库中的几个表。我发现很难快速返回结果!

即使找到一列的唯一行也需要 10 多分钟。我使用命令行或 PHPMyAdmin 之类的工具来触发查询,等待时间保持不变。

例如:

SELECT COUNT (DISTINCT column_name) FROM table_name;
Run Code Online (Sandbox Code Playgroud)

我担心如果在这些表上使用连接操作,这个等待时间会显着增加并且会更加痛苦。

任何人都可以提出什么可能是快速恢复统计数据的可能解决方案?

postgresql performance count distinct postgresql-performance

0
推荐指数
1
解决办法
56
查看次数

wal_level hot_standby 和logical

我有一个 PostgreSQL 设置,有一个主站和三个从站。它被配置为流式复制。

现在,我只想使用pglogical将几个表从主服务器复制到分析服务器。为此,我们需要启用逻辑wal_level. 那么如何在不破坏现有复制的情况下启用它呢?

postgresql replication configuration postgresql-9.6

0
推荐指数
1
解决办法
2190
查看次数

递归外键的排除约束(以树为例)

我有带有递归外键的表。它只是层次树结构:

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

postgresql tree foreign-key constraint recursive

0
推荐指数
1
解决办法
221
查看次数

启用 pg_stat_statements 会减少磁盘空间吗?

最近我被告知,自从启用pg_stat_statements,可用磁盘空间正在迅速下降。我不认为这是由那个引起的,但我想知道:启用会pg_stat_statements减少磁盘空间吗?多少?

postgresql

0
推荐指数
1
解决办法
452
查看次数

为什么 ADD CONSTRAINT ... NOT VALID 需要很长时间?

我向这样的某些列添加了 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)

postgresql constraint alter-table

0
推荐指数
1
解决办法
606
查看次数

是否可以将 Postgres 扩展添加到 AWS Aurora?

我正在尝试对 Postgres 数据库进行未来验证,以便将其转移到 AWS Aurora。

我正在使用指南扩展名uuid-ossp

是否可以向 AWS Aurora 添加 PostGres 扩展?

我特别感兴趣的是该扩展是否uuid-ossp可以在 Aurora 中使用。

postgresql postgresql-extensions amazon-rds-aurora

0
推荐指数
1
解决办法
2549
查看次数

PostgreSQL 在技术上如何将小表“保存在 RAM 中”?

我曾经问过性能问题,人们会告诉我 PostgreSQL 自动将足够小的表完全保存在 RAM 中,以免给 HDD 带来压力,从而实现“小表”的超快读写,即很少更容易适合可用 RAM(或分配给 PG 的内容)的行。

这对我来说很有意义,让我很高兴,因为我可以在并行运行的脚本之间有效地进行通信,而不会给我可怜的 HDD/SSD 带来压力并堵塞所有资源。

但后来我突然想到:这怎么可能?PG 怎么可能将一个表全部保存在 RAM 中,无论它有多小,而不会丢失数据完整性?

如果它不是一直写入永久存储,如果突然断电,或者软件崩溃,或者在运行时发生其他一些灾难,它怎么可能恢复?我想得越多,这对我来说就越不重要。

我能想到的唯一答案是:不,它实际上并没有这样做。如果 PG 从不(或很少)将数据写入永久存储,我看不到任何可能的方式来避免丢失数据。

如果这是可能的,但只有在为表格或设置启用某种标志后,我才想知道该标志/设置。我想为仅包含“内部通信”数据的表启用此功能,该数据类型除了作为主动运行脚本的“公共数据存储”之外没有任何价值。

postgresql write-ahead-logging

0
推荐指数
2
解决办法
88
查看次数

锁定:允许插入但不允许更新

我想锁定一个表:INSERT应该被允许,但UPDATE应该被禁用。

我正在使用当前的 PostgreSQL 版本。

我阅读了“建议锁”和“显式锁定”。也许我是盲人,但我找不到适合我的目标的解决方案。

以下是我的用例的详细信息:

有一个表,大致类似于日志记录:多个进程同时向表中添加新行。

脚本每小时处理一次添加的数据。

现在我想确定这个脚本有一个固定的工作集。不应修改脚本正在处理的行。但是,如果在脚本运行时添加新行也没关系。这些行在下一次调用脚本时获取进程。

postgresql locking

0
推荐指数
1
解决办法
95
查看次数

为什么 PostgreSQL 中不存在带有“have”子句的别名?

我正在尝试计算两个坐标之间的距离并根据一些条件获取一些信息。一个类似的带有 '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

0
推荐指数
1
解决办法
392
查看次数

如何防止 PostgreSQL 自动舍入数字类型?

我有一个简单的架构和 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 decimal

0
推荐指数
1
解决办法
699
查看次数