标签: postgresql

Postgres“无法写入哈希连接临时文件:设备上没有剩余空间”

不久前我遇到了这个错误,我对两件事很好奇 -

1- postgres 的内部机制如何首先导致此消息发生?与数据库创建的临时文件的创建有关的哈希连接是什么?我知道这与创建一个超出数据库内存分配范围的临时文件有关,但我不知道为什么将其称为散列连接。

2- 我怎样才能预测和防止将来发生这样的错误(与性能和内存有关)?

postgresql performance postgresql-9.1 temporary-tables postgresql-performance

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

Postgresql 加入删除

我刚刚观看了 Rob Farley “为简化设计”的非常有趣的视频,我想知道视频中给出的 4 条规则是否也适用于 PostgreSQL。

如果视图正在执行不执行的连接:

  • 添加任何列
  • 消除行
  • 重复行
  • 引入空值

对于不需要它们的查询,连接是否会被忽略。或者它只是一个 SQL Server 的东西?

postgresql join

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

使用 intarray 对数组元素进行分组和计数

我正在处理启用了intarray扩展的 Postgres 9.4项目。我们有一个看起来像这样的表:

items
-------------------------------------
id    name                  tag_ids  
--------------------------------------
1     a car                 {1,4}
2     a room to rent        {1}
3     a boat                {1,2,4,11}
4     a wine                {2}
5     emily                 {3}
Run Code Online (Sandbox Code Playgroud)

如果可能,我想对标签 ID 进行分组。就像获取具有tag_id“{1,2,4,11}”的所有元素的计数

tag_id  count
1       3
2       2
4       2
11      1
Run Code Online (Sandbox Code Playgroud)

这可能吗?我会认为这样的交叉点:

select * from items where tag_ids && '{1,2,4,11}'
Run Code Online (Sandbox Code Playgroud)

但我需要按交集结果的数组元素进行分组。如果我按 tag_ids 分组,它只是唯一值。

我该怎么做?

postgresql aggregate array

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

Basic transactional DDL script in PostgreSQL

PostgreSQL newbie here trying to put together a transactional DDL script to atomically create a database and its schema in Postgres 9.3: in a transaction, create a few tables; if any errors, roll the whole thing back; otherwise commit. I'm having a hard time getting the syntax right, and I suspect my problems might stem from conflating SQL DDL with PL/pgSQL and/or not grokking the transaction semantics.

Long story short, what's the PL/pgSQL boilerplate for a script to do something …

postgresql transaction ddl plpgsql

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

提高 GROUP BY 子句中的排序性能

我在 Postgres 9.4.1 中有两个表,eventsevent_refs具有以下模式:

events 桌子

CREATE TABLE events (
  id serial NOT NULL PRIMARY KEY,
  event_type text NOT NULL,
  event_path jsonb,
  event_data jsonb,
  created_at timestamp with time zone NOT NULL
);

-- Index on type and created time

CREATE INDEX events_event_type_created_at_idx
  ON events (event_type, created_at);
Run Code Online (Sandbox Code Playgroud)

event_refs 桌子

CREATE TABLE event_refs (
  event_id integer NOT NULL,
  reference_key text NOT NULL,
  reference_value text NOT NULL,
  CONSTRAINT event_refs_pkey PRIMARY KEY (event_id, reference_key, reference_value),
  CONSTRAINT event_refs_event_id_fkey FOREIGN KEY (event_id) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance execution-plan group-by postgresql-9.4 postgresql-performance

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

哪个先执行?触发还是规则?

使用 PostgreSQL。

有一个触发器,它在删除后做一些事情,并制定了一个规则,如果某些事情是真的,则停止删除。

我的问题是:该规则是否也会阻止触发器的发生?

触发器定义:

CREATE TRIGGER wypo AFTER INSERT ON "Wyp" FOR EACH ROW EXECUTE PROCEDURE funk_wyp();
Run Code Online (Sandbox Code Playgroud)

触发功能

CREATE OR REPLACE FUNCTION funk_wyp() RETURNS TRIGGER AS '
DECLARE
  dodatek real := (SELECT f.cena FROM filmy f WHERE f.ID = NEW.co);
BEGIN
    UPDATE "zyskiklient" 
       SET "ile" = ile + dodatek 
    WHERE kto = NEW.kto; 
    UPDATE "istotnoscklienta" 
       SET "poziom" = (SELECT poziom(NEW."kto")) 
    WHERE "kto" = NEW.kto;
RETURN NEW;
END; 
' LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

规则:

CREATE OR REPLACE RULE zasada_delete_konto 
  AS ON DELETE …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger database-design

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

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

我正在使用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
查看次数