标签: postgresql

Postgres 设置在 pgsql 中报告不同

show effective_cache_size;我们在 CentOS 6 上运行 PostgreSQL 9.2,当我运行命令与查询时,我发现设置报告有所不同select * from pg_settings where name = 'effective_cache_size';。据我所知,这些命令应该是相同的。例如

显示有效缓存大小;

有效缓存大小
----------------------
 2816MB
(1 行)

选择名称,从 pg_settings 设置,其中 name = ' effective_cache_size';

名称 | 有效缓存大小

设置 | 360448

我正在尝试找出 PostgreSQL 使用的值。如果我以超级用户身份运行它,我会得到相同的结果。我该相信哪一个?

postgresql postgresql-9.2

3
推荐指数
1
解决办法
1952
查看次数

限制两个特定列值同时存在

我有一个 PostgreSQL 示例表,其中最多允许有一行不是“c”类型的行。

我将不胜感激任何帮助创建一个强制执行这一点的约束。

CREATE TABLE example
(
  example_id    serial PRIMARY KEY,
  example_state CHAR(1) NOT NULL
);

ALTER TABLE example ADD CONSTRAINT 
  example_constraint
CHECK (example_state = 'a' OR example_state = 'b' OR example_state = 'c');
Run Code Online (Sandbox Code Playgroud)

postgresql database-design constraint exclusion-constraint postgresql-9.3

3
推荐指数
1
解决办法
3147
查看次数

使用动态 SQL 重置串行 PK 的顺序

如何使用字符串和DECLARE变量的组合动态引用序列名称(如下所示)?下面的代码是否正确或者是否有其他方法可以做到这一点?

DO我的目标是出于性能原因在/块中执行此操作BEGIN,而且它将通过做一些有用的事情来帮助我理解 plpgsql,因此除非确实必须,否则我不会将其混合到 PHP 中。

DO $$
 DECLARE PKEY VARCHAR;
BEGIN

SELECT pg_attribute.attname INTO PKEY 
FROM pg_index, pg_class, pg_attribute 
WHERE pg_class.oid = 'parts1'::regclass 
AND indrelid = pg_class.oid 
AND pg_attribute.attrelid = pg_class.oid 
AND pg_attribute.attnum = any(pg_index.indkey) 
AND indisprimary;

--SELECT setval('parts1_id_seq', (SELECT MAX(pkey) + 1 FROM parts));
SELECT setval('parts1_' || PKEY || '_seq', (SELECT MAX(pkey) + 1 FROM parts));

  END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

postgresql auto-increment dynamic-sql plpgsql

3
推荐指数
1
解决办法
1888
查看次数

在列的子集上选择“不同”,命名要返回的不同列集

我正在使用 PostgreSQL 并且有两个表:

Table_A
colA | colB | colC | colD | colE | colF | colG | colH | colI | colJ

Table_B
colA | colB | colC | columnD | colE | columnF | colG | colH | colI | colJ
Run Code Online (Sandbox Code Playgroud)

我正在尝试将多行插入table_B到 中table_A。我的问题是Table_A有一个基于colA, colB, colC, colD, and colE. Table_B没有这个限制,这意味着简单的方法insert不起作用:

INSERT INTO Table_A (colA, colB, colC, colD, colE, colF, colG, colH, colI, colJ) 
SELECT colA, colB, colC, columnD, …
Run Code Online (Sandbox Code Playgroud)

postgresql

3
推荐指数
1
解决办法
7074
查看次数

为 PITR 备份大型 postgres 数据库

我有一个 postgres 9.1 主服务器和 2 个从服务器,设置了带有 WAL 存档的流式复制。

现在,我正在尝试为 PITR 设置至少 1 周的窗口期。这是为了弥补任何管理错误(例如错误地删除重要的表)。这是我对 PITR 的理解

  • 我们需要在已知时间点对数据库进行基本备份。
  • 我们需要一个从基础备份到出错点的 WAL 存档。

使用上面的 2 个方法,我们可以将数据库重建到中间的任何点。

涉及的数据库很大,大约1TB,每周增长30GB

我想了解在运行实例上实现快速基础备份创建和低性能开销的最佳方法是什么。我可以想到以下替代方案,但不确定

  • 如果每个都有优点和缺点
  • 如果有其他更好的选择

    1. 是每周进行一次基本备份并累积 WAL 直到下一次基本备份还是只进行一次基本备份(比如现在)并每周只备份 WAL 更好。

    2. 如果我们每周都进行基础备份,那么使用 pg_basebackup 或 pg_start_backup + rsync + pg_stop_backup 更好。如果我由于 rsync 而每周使用相同的目标磁盘/卷/文件夹,第二个选项会明显更快吗?

    3. 是否最好对主服务器运行基本备份,或者是否可以在暂时停止其中一个从服务器并在快照后恢复复制后拍摄 postgres 集群的磁盘快照。如果我想要执行 PITR,此快照是否可用于在恢复模式下设置实例,或者是否会出现任何数据一致性或时间线问题?

感谢您的任何见解。

postgresql replication

3
推荐指数
1
解决办法
4438
查看次数

处理损坏:文件级备份与 pg_basebackup

关于损坏的 wiki建议立即通过停止 postmaster 并使用 来对数据库进行文件级备份tar,但我的印象是使用pg_basebackup是更好的选择。有什么理由我不应该使用吗pg_basebackup

postgresql corruption postgresql-9.4

3
推荐指数
1
解决办法
201
查看次数

在Postgres中,是否可以从表中获取所有行,其中列可以转换为不同的类型?

我在 Postgres 数据库中有一个表TEXT,其中有一列名为data,我用它来存储 IP 地址和域名。我想知道是否可以选择表中data列为有效 IP 地址的所有行。

WHERE可以使用基于类型转换的子句来完成此操作吗?

postgresql cast where

3
推荐指数
1
解决办法
2756
查看次数

使用前缀查询 bytea 列

假设我有一个表,其中有一个名为 的表上的bytea列,我该如何:datat

  1. 编写一个查询,返回列上具有特定前缀的所有行data
  2. 为查询建立索引。

我正在使用 Postgresql 9.5。

postgresql performance index postgresql-performance

3
推荐指数
1
解决办法
3504
查看次数

如何防止 PostgreSQL 重写 OUTER JOIN 查询?

我的查询是:

SELECT  Acol1, Acol2, Bcol1, Bcol2, Ccol1, Ccol2
FROM    tableA LEFT JOIN
            (tableB FULL JOIN tableC ON (Bcol1 = Ccol1))
            ON (Acol1 = Bcol1)
Run Code Online (Sandbox Code Playgroud)

EXPLAIN ANALYZE给我:

                                                      QUERY PLAN                                                      
----------------------------------------------------------------------------------------------------------------------
 Hash Right Join  (cost=99.65..180.45 rows=1770 width=24) (actual time=0.043..0.103 rows=3 loops=1)
   Hash Cond: (tableb.bcol1 = tablea.acol1)
   ->  Hash Left Join  (cost=49.83..104.08 rows=1770 width=16) (actual time=0.011..0.062 rows=3 loops=1)
         Hash Cond: (tableb.bcol1 = tablec.ccol1)
         ->  Seq Scan on tableb  (cost=0.00..27.70 rows=1770 width=8) (actual time=0.001..0.002 rows=3 loops=1)
         ->  Hash  (cost=27.70..27.70 rows=1770 width=8) (actual time=0.004..0.004 …
Run Code Online (Sandbox Code Playgroud)

postgresql join execution-plan explain

3
推荐指数
1
解决办法
1583
查看次数

如何将连接结果保存到另一个表?

在 PostgreSQL 中,我可以使用SELECT INTOSELECT将结果保存到另一个表:

SELECT id INTO new_record_ids FROM new_table
  EXCEPT
    SELECT id FROM old_table
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)

然而,这不适用于连接:

-- doesn't work:
SELECT * INTO new_records FROM new_table
  JOIN new_record_ids ON new_record_ids.id = new_table.id
ORDER BY new_table.id;
Run Code Online (Sandbox Code Playgroud)

连接本身是正确的:

-- works:
SELECT * FROM new_table
  JOIN new_record_ids ON new_record_ids.id = new_table.id
ORDER BY new_table.id;
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将联合表保存到另一个表?

postgresql join

3
推荐指数
1
解决办法
2万
查看次数