Questions tagged «postgresql»

PostgreSQL的所有版本。如果该上下文很重要,请添加其他特定于版本的标记,例如postgresql-11。

2
对子集聚合建模约束?
我使用的是PostgreSQL,但我认为大多数高端数据库必须具有一些类似的功能,而且,针对它们的解决方案可能会为我带来灵感,因此,请不要考虑此特定于PostgreSQL。 我知道我不是第一个尝试解决此问题的人,因此我认为这里值得一问,但我正在尝试评估建模会计数据的成本,以便使每笔交易都达到基本平衡。会计数据是仅追加的。这里的总体约束(用伪代码编写)可能大致类似于: CREATE TABLE journal_entry ( id bigserial not null unique, --artificial candidate key journal_type_id int references journal_type(id), reference text, -- source document identifier, unique per journal date_posted date not null, PRIMARY KEY (journal_type_id, reference) ); CREATE TABLE journal_line ( entry_id bigint references journal_entry(id), account_id int not null references account(id), …

3
查询期间从磁盘检索到什么?
很简单的问题,可能在某个地方回答了,但是我似乎无法为Google形成正确的搜索问题... 在特定表的子集上进行查询时,该表中的列数是否会影响查询的性能? 例如,如果表Foo有20列,但是我的查询只选择了其中的5列,那么拥有20列(相对于说10列)是否会影响查询性能?为简单起见,假设这5列中包含WHERE子句中的任何内容。 除了操作系统的磁盘缓存之外,我还担心Postgres的缓冲区缓存的使用。我对Postgres的物理存储设计非常了解。表存储在多页中(默认每页大小为8k),但我不太了解如何从那里排列元组。PG是否足够聪明,仅从磁盘中获取包含这5列的数据?

2
了解EXPLAIN命令的时间格式-Postgres
当我在给定查询上运行EXPLAIN ANALYZE命令时,我很难解释输出的时间值。例如(实际时间= 8163.890..8163.893)。内部小数代​​表重复字符吗?抱歉,这可能是一个讨厌的问题,但是我想确保我正确地解释了结果。 -> GroupAggregate (cost=2928781.21..2929243.02 rows=1 width=27712) (actual time=8163.890..8163.893 rows=1 loops=1)


5
如何检查PostgreSQL服务器的SSL证书?
假设有一个正在运行的PostgreSQL服务器并且已启用SSL。使用“标准” Linux和PostgreSQL工具,如何检查其SSL证书? 我希望输出的结果类似于您从运行中得到的结果openssl x509 -text ...。而且我希望得到一两个命令行的答案,因此我不必求助于运行数据包嗅探器。 我无权访问PostgreSQL服务器,因此无法直接查看其配置文件。 我没有超级用户登录名,因此无法获取ssl_cert_file设置的值,然后pg_read_file就不能对其进行设置。 使用openssl s_client -connect ...不起作用,因为PostgreSQL似乎不想立即进行SSL握手。 通过快速浏览psql文档,我找不到命令行参数,该参数使它在启动时显示该信息。(尽管它确实向我显示了某些密码信息。)

1
如何在PostgreSQL中原子替换表数据
我想替换表的全部内容,而不会影响SELECT过程中的任何传入语句。 用例是拥有一个表,该表存储定期提取的邮箱信息,并且需要将其存储在PostgreSQL表中。有许多客户端正在使用不断查询同一张表的应用程序。 通常,我会做类似(伪代码传入)的操作... BEGIN TRANSACTION TRUNCATE TABLE INSERT INTO COMMIT 但不幸的是,在此过程中无法读取该表。由于需要花费时间INSERT INTO。该表已锁定。 在MySQL中,我本可以使用其原子RENAME TABLE命令来避免这些问题... CREATE TABLE table_new LIKE table; INSERT INTO table_new; RENAME TABLE table TO table_old, table_new TO table; *atomic operation* DROP TABLE table_old; 如何在PostgreSQL中实现呢? 出于这个问题的目的,您可以假设我没有使用外键。
14 postgresql 

1
如何使用“ WHERE字段为NULL”索引查询?
我的桌子上有很多插入物,将(uploaded_at)字段之一设置为NULL。然后,定期任务选择所有元组WHERE uploaded_at IS NULL,对其进行处理并更新,将其设置uploaded_at为当前日期。 我应该如何索引表? 我了解我应该使用部分索引,例如: CREATE INDEX foo ON table (uploaded_at) WHERE uploaded_at IS NULL 或类似的东西。我有点困惑,但是如果对一个始终为的字段进行索引是正确的话NULL。或者使用b树索引是否正确。哈希看起来是个更好的主意,但是它已经过时了,不能通过流热备份复制来复制。任何建议将不胜感激。 我已经尝试了以下索引: "foo_part" btree (uploaded_at) WHERE uploaded_at IS NULL "foo_part_id" btree (id) WHERE uploaded_at IS NULL 并且查询计划程序似乎总是选择foo_part索引。explain analyse也会为foo_part索引产生更好的结果: Index Scan using foo_part on t1 (cost=0.28..297.25 rows=4433 width=16) (actual time=0.025..3.649 rows=4351 loops=1) Index Cond: (uploaded_at …

3
比较两个相似的Postgres数据库的差异
我偶尔以Postgres dBs的形式下载可公开获得的数据集。这些数据集由存储库主机随时间更新/修改/扩展。 是否有Postgres命令或工具(最好是FOSS)可以显示旧的和新的Postgres数据库之间的差异?(一个可行的假设是95%的条目未更改,并且表和关系也未更改)。

3
如何在PL / pgSQL中返回多行记录
我正在尝试使用RECORD数据类型返回多个记录,有没有一种方法可以追加到RECORD并在每次迭代中向此RECORD添加/附加新值。 也就是说,我想附加到,rec以便rec在循环结束时成为一组行,我可以在函数末尾返回。目前,我正在这样做- SELECT temp_table.col1, temp_table.col2, temp_table.col3 INTO rec FROM temp_table WHERE temp_table.col3 = false; 我的完整代码在这里: CREATE OR REPLACE FUNCTION validation() RETURNS RECORD AS $$ DECLARE rec RECORD; temp_row RECORD; BEGIN CREATE TEMPORARY TABLE temp_table (col1 TEXT, col2 INTEGER, col3 BOOLEAN) ON COMMIT DROP; FOR temp_row IN SELECT * FROM staging.validation …


1
在PostgreSQL中查询JSONB
我有一个表,persons其中包含两列,一个id和一个基于JSONB的data列(此表仅出于演示目的而制作,可以与PostgreSQL的JSON支持一起使用)。 现在,假设它包含两个记录: 1, { name: 'John', age: 30 } 2, { name: 'Jane', age: 20 } 现在,假设我想获得每个25岁以上的人的名字。我尝试过的是: select data->'name' as name from persons where data->'age' > 25 不幸的是,这会导致错误。我可以使用->>代替来解决它->,但是比较不会再按预期进行,因为不是比较数字,而是将它们表示为字符串: select data->'name' as name from persons where data->>'age' > '25' 然后,我发现实际上可以使用->和强制转换为解决此问题int: select data->'name' as name from persons where cast(data->'age' as int) > …



1
Postgres:关系不存在错误
我用pg_restore用转储文件加载了我的postgres数据库。我用用户连接到数据库: sudo -u arajguru psql dump select current_user; current_user -------------- arajguru 现在,我可以看到所有新创建的表: dump=> \dt List of relations Schema | Name | Type | Owner --------+-------------------+-------+---------- public | Approvals | table | arajguru public | Approvers | table | arajguru public | Conditions | table | arajguru public | Entities | …
14 postgresql 

4
删除Postgres数据库中的所有数据
我已经使用--data-only和--column-inserts标志从生产服务器上创建了一个新的数据库转储,因此在暂存服务器上执行还原时,我只有一堆插入语句可插入数据。 pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql 从生产转储中还原数据之前,如何先删除登台服务器数据库中的所有数据? 我只想删除所有数据,所以不必删除和创建数据库以及所有其他东西。我只想删除数据并插入所有新数据。 由于多种原因,我没有选择删除和​​创建数据库的选项。我将必须删除所有数据并仅插入,因此无论如何查找该方法,我都愿意这样做,但是显然需要帮助。 我还需要自动执行此过程。将自动执行“从生产数据库中转储数据”,然后“在暂存数据库上删除数据”,然后“将数据还原到暂存数据库”。我只需要“在登台数据库上删除数据”部分的帮助。 我在PostgreSQL 9.5.2上运行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.