标签: postgresql

转储具有“压缩数据已损坏”错误的数据库

我正在使用pg_dump转储大型(396 GB)PostgreSQL 数据库:

pg_dump --clean --create mydatabase
Run Code Online (Sandbox Code Playgroud)

运行一天后,语句失败ERROR: compressed data is corruptpg_dump退出。

100% 的数据完整性不是我的首要任务。这可能只是一个断行阻止我移动或备份一个需要数周时间创建的数据库。输了那行我没问题。

有什么方法可以创建忽略此类数据错误的转储?我在pg_dump文档中什么也没找到。

如果没有,如何查找并删除表中所有损坏的行?其他表中的行指向它们,也需要删除。

postgresql backup postgresql-9.3 pg-dump

6
推荐指数
1
解决办法
2977
查看次数

使用 pgbouncer 限制连接数

所以我有这个 pgbouncer 配置:

[databases]
my_db = host=10.10.10.10
my_db_with_conn_limit = host=10.10.10.10 dbname=my_db pool_size=55

max_client_conn = 300
default_pool_size = 65
reserve_pool_size = 5
reserve_pool_timeout = 1 
Run Code Online (Sandbox Code Playgroud)

目标是限制来自特定应用程序的连接数 - 当数据库名称为 database_with_conn_limit 时,只允许 55 个连接。

基本上,这些应用程序是相同的,但我希望其中一个限制连接,另一个获取任意数量的连接。

  • 这是正确的设置吗?
  • 或者我也应该为 my_db 指定 pool_size,给它所有 Postgres 的负 55?

postgresql pgbouncer

6
推荐指数
1
解决办法
868
查看次数

Postgres 9.5 中 Unicode 文本的一致性检查不一致?

使用 PostgreSQL 9.5。似乎 Postgres 与它比较类似于??. 一个唯一的约束是考虑一些相等的字符串,GROUP BY而这些字符串是不同的。

我有一个GROUP BYTEXT列上使用的选择查询和在其他一些列上使用的聚合函数以确保TEXT输出中列的唯一性,并且我将结果插入到具有主键(因此是唯一的)约束的表中这TEXT列。

看起来与此相似;为简单起见,我刚刚更改了表名:

 INSERT INTO mytable ( % mytable has string TEXT PRIMARY KEY, score INT
            SELECT 
            sq1.string string, sq2.score / sq1.score
            FROM
            (
                SELECT n.string string, SUM(n.score) score
                FROM
                othertable1 n % has string TEXT (non-unique) and score INT
                GROUP BY string
            ) sq1,
            (
                SELECT n.string string, SUM(n.score) score
                FROM
                othertable2 n % has string TEXT (non-unique) and score …
Run Code Online (Sandbox Code Playgroud)

postgresql unique-constraint unicode

6
推荐指数
0
解决办法
564
查看次数

存在子选择还是内部连接?

我正在进入我的神秘查询的下一个级别。看起来在一个存在的内部有一个子选择,但在同一个表上。我认为这可能可以通过INNER JOIN更高的方式简化。

使用 PostgreSQL 9.4.2。
表定义 ( /d+):https : //gist.github.com/neezer/879f5d3649ca1903c6f3
基数:

billing_pricequote: 1,462,625 行
billing_pricequotestatus: 3,331,657 行
billing_lineitem: 43,687,855 行

这是原始查询,不建议对里面的子EXISTS查询进行修改

SELECT i.quote_id, i.acct_id AS account_id, SUM(i.delta_amount) AS amt
FROM billing_lineitem i
INNER JOIN billing_pricequote pq ON i.quote_id = pq.id
WHERE pq.date_applied AT TIME ZONE 'PST' BETWEEN '2016-02-02T00:00:00'::timestamp
                                AND '2016-03-03T22:27:41.734102-08:00'::timestamptz
AND EXISTS(
  SELECT s1.quote_id
  FROM billing_pricequotestatus s1
  INNER JOIN (
    SELECT DISTINCT ON (quote_id) quote_id, MAX(created_at) AS max_created_at …
Run Code Online (Sandbox Code Playgroud)

postgresql performance timestamp greatest-n-per-group postgresql-performance

6
推荐指数
2
解决办法
1351
查看次数

Postgres hstore 检查键是否存在且与值不匹配

我在审计表中有一个 hstore 字段,用于存储因操作而更改的所有字段。

在插入时,键updated_byinchanged_fields是 NULL 并且在系统更新时它被设置为system。我想返回未定义键或未定义键的所有行,system但我不知道如何执行此操作。

到目前为止我已经尝试过

select changed_fields -> 'updated_by' 
from audit.logged_actions 
where (changed_fields -> 'updated_by' != 'system' 
       or defined(changed_fields, 'updated_by') = false) 
order by event_id desc
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我不太确定为什么。关于我做错了什么的任何想法?

postgresql hstore

6
推荐指数
1
解决办法
8067
查看次数

如果我在单个事务中执行多次更新,为什么性能是非线性的

一个较旧的问题涵盖了为什么单个事务中多个 INSERTS 的性能随着 INSERT 计数的增长而非线性的一些原因。

按照那里的一些建议,我一直在尝试优化在单个事务中运行多个更新。在实际场景中,我们正在批处理来自另一个系统的数据,但我有一个较小的场景进行测试。

鉴于 postgresql 9.5.1 上的这个表:

\d+ foo
                                         Table "public.foo"
 Column |  Type   |                    Modifiers                     | Storage | Stats target | Description 
--------+---------+--------------------------------------------------+---------+--------------+-------------
 id     | bigint  | not null default nextval('foo_id_seq'::regclass) | plain   |              | 
 count  | integer | not null                                         | plain   |              | 
Run Code Online (Sandbox Code Playgroud)

我有以下的测试文件:100.sql1000.sql10000.sql50000.sql100000.sql。每个包含以下行,UPDATE根据文件名重复:

BEGIN;
UPDATE foo SET count=count+1 WHERE id=1;
...
UPDATE foo SET count=count+1 WHERE id=1;
COMMIT;  
Run Code Online (Sandbox Code Playgroud)

当我对加载每个文件进行基准测试时,结果如下所示: …

postgresql performance transaction

6
推荐指数
1
解决办法
508
查看次数

如何将一列的多个值计为一组?

我有一个main包含以下行的表:

 id |  name  | rank
----+--------+------
  1 | Ali    | a
  2 | Sami   | b
  3 | Khan   | c
  4 | Kamran | d
  5 | Imran  | e
  6 | Asad   | a
  7 | Nawid  | v
  8 | Jamil  | c
  9 | Usman  | j
Run Code Online (Sandbox Code Playgroud)

我想计算 column 中具有某些值的行rank。例如,我想按如下方式对值进行分组:

  • (a,b,v)应按名称归入一组myvalues
  • (c,d,j)应该按名称出现在另一个组中yourvalues
  • (e)应该通过 name 到达另一个组extravalues

我想要的结果:

myvalues | yourvalues …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate postgresql-9.1 aggregate-filter

6
推荐指数
1
解决办法
8136
查看次数

如何为 Postgres 设置 Amazon RDS 参数组?

我正在尝试在 Amazon Web Services 中为 Postgres 9.5 RDS 实例创建一个参数组。我对用于诸如shared_buffersand 之类的单位感到有些困惑min_wal_size。通常,这些将postgresql.conf使用单位指定,例如4GB128kB。如果我在 AWS 中输入相同的值,我会收到一个错误,指出我指定的值无效,但严格来说数字值似乎没问题。有谁知道这些参数期望什么单位?

postgresql aws amazon-rds

6
推荐指数
2
解决办法
9189
查看次数

针对 PostgreSQL 中的视图发出 DDL 是否与针对表发出 DDL 取出相同的锁?

我知道视图是使用规则系统实现的,但我不清楚在针对它们运行事务性 DDL 时这是否有任何优点/缺点。发出CREATE OR REPLACE VIEW ...;DROP VIEW ...; CREATE VIEW...;在事务中是否会针对表取出类似于 DDLACCESS EXCLUSIVE锁?所有在 DDL 之前发出的查询都必须在 DDL 执行之前完成吗?查询会在 DDL 阻塞后发出,直到 DDL 完成吗?

postgresql view ddl locking

6
推荐指数
1
解决办法
601
查看次数

在单引号字符串中添加变量值。在单引号内展开变量

我尝试了以下命令的不同变体,但不起作用。我只想使用位置字符串中的变量运行以下命令:

CREATE TABLESPACE data OWNER appuser
  LOCATION '/var/lib/pgsql95/:variable/pg_tblspc/data';
Run Code Online (Sandbox Code Playgroud)

已经尝试过的(变化):

EXECUTE CREATE TABLESPACE data OWNER appuser
  LOCATION ''/var/lib/pgsql95/' || base || '/pg_tblspc/data'';';
Run Code Online (Sandbox Code Playgroud)

PREPARE tablespace (text) AS
  CREATE TABLESPACE aspire_data OWNER aspireapp
  LOCATION '/var/lib/pgsql95/$1/pg_tblspc';

EXECUTE tablespace('base');
Run Code Online (Sandbox Code Playgroud)

\set myvariable 'base'
CREATE TABLESPACE aspire_data OWNER aspireapp
  LOCATION '/var/lib/pgsql95/':myvariable'/pg_tblspc';
Run Code Online (Sandbox Code Playgroud)

postgresql psql

6
推荐指数
1
解决办法
2820
查看次数