我正在使用pg_dump转储大型(396 GB)PostgreSQL 数据库:
pg_dump --clean --create mydatabase
Run Code Online (Sandbox Code Playgroud)
运行一天后,语句失败ERROR: compressed data is corrupt并pg_dump退出。
100% 的数据完整性不是我的首要任务。这可能只是一个断行阻止我移动或备份一个需要数周时间创建的数据库。输了那行我没问题。
有什么方法可以创建忽略此类数据错误的转储?我在pg_dump文档中什么也没找到。
如果没有,如何查找并删除表中所有损坏的行?其他表中的行指向它们,也需要删除。
所以我有这个 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 个连接。
基本上,这些应用程序是相同的,但我希望其中一个限制连接,另一个获取任意数量的连接。
使用 PostgreSQL 9.5。似乎 Postgres 与它比较类似于??. 一个唯一的约束是考虑一些相等的字符串,GROUP BY而这些字符串是不同的。
我有一个GROUP BY在TEXT列上使用的选择查询和在其他一些列上使用的聚合函数以确保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) 我正在进入我的神秘查询的下一个级别。看起来在一个存在的内部有一个子选择,但在同一个表上。我认为这可能可以通过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
我在审计表中有一个 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)
但这不起作用,我不太确定为什么。关于我做错了什么的任何想法?
一个较旧的问题涵盖了为什么单个事务中多个 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.sql,1000.sql,10000.sql,50000.sql和100000.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)
当我对加载每个文件进行基准测试时,结果如下所示: …
我有一个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) 我正在尝试在 Amazon Web Services 中为 Postgres 9.5 RDS 实例创建一个参数组。我对用于诸如shared_buffersand 之类的单位感到有些困惑min_wal_size。通常,这些将postgresql.conf使用单位指定,例如4GB或128kB。如果我在 AWS 中输入相同的值,我会收到一个错误,指出我指定的值无效,但严格来说数字值似乎没问题。有谁知道这些参数期望什么单位?
我知道视图是使用规则系统实现的,但我不清楚在针对它们运行事务性 DDL 时这是否有任何优点/缺点。发出CREATE OR REPLACE VIEW ...;或DROP VIEW ...; CREATE VIEW...;在事务中是否会针对表取出类似于 DDL的ACCESS EXCLUSIVE锁?所有在 DDL 之前发出的查询都必须在 DDL 执行之前完成吗?查询会在 DDL 阻塞后发出,直到 DDL 完成吗?
我尝试了以下命令的不同变体,但不起作用。我只想使用位置字符串中的变量运行以下命令:
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 ×10
performance ×2
aggregate ×1
amazon-rds ×1
aws ×1
backup ×1
ddl ×1
hstore ×1
locking ×1
pg-dump ×1
pgbouncer ×1
psql ×1
timestamp ×1
transaction ×1
unicode ×1
view ×1