标签: postgresql

UUID 或 BIGSERIAL 外键 Postgres

我有 8 个使用 UUID 主键的表,其中 7 个使用 UUID 外键。使用 BIGSERIAL 而不是 UUID 对性能会更好吗?

postgresql primary-key uuid

4
推荐指数
1
解决办法
2001
查看次数

PostgrSQL 中大表的预缓​​存索引

我有一个包含大约 1000 万行的表,其中包含一个主键和一个定义在其上的索引:

create table test.test_table(
    date_info date not null,
    string_data varchar(64) not null,
    data bigint
    primary key(date_info, string_data));
    create index test_table_idx 
    on test.test_table(string_data);
Run Code Online (Sandbox Code Playgroud)

我有一个使用了的查询test_table_idx

select distinct date_info from test.test_table where string_data = 'some_val';
Run Code Online (Sandbox Code Playgroud)

问题是第一次运行查询最多可能需要 20 秒,而在任何后续运行中都需要 < 2 秒。

有没有办法将整个索引加载到内存中,而不是在第一次访问时获取数据库加载信息?

postgresql index cache postgresql-12

4
推荐指数
1
解决办法
425
查看次数

“psql:/usr/pgsql-11/lib/libpq.so.5:没有可用的版本信息(psql需要)”实际上是什么意思?

我对以下输出有疑问:

[nikola@192 ~] $ sudo su - postgres
[postgres@192 ~] $ psql dvdrental postgres
psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)
psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)
psql (11.7, server 11.8)
Type "help" for help.

dvdrental=# 
Run Code Online (Sandbox Code Playgroud)

以下两条消息代表什么,为什么?我正在询问的消息:

  1. psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)
  2. psql (11.7, server 11.8)-顺便说一句,这个psql --version命令我获得以下的输出: psql (PostgreSQL) 11.8必须安装才能执行的命令,比如PostgreSQL服务器版本11.7\dt\l)......并输出如下:
postgres=# select * FROM version();
                                                version                                                 
--------------------------------------------------------------------------------------------------------
 PostgreSQL 11.8 on x86_64-pc-linux-gnu, …
Run Code Online (Sandbox Code Playgroud)

postgresql psql scripting bash

4
推荐指数
1
解决办法
8750
查看次数

如何用干净的副本安全地替换旧表?

我创建了一个table_cleanedliketable并从tableinto插入了唯一值table_cleaned。现在我想更换tabletable_cleaned使用

DROP TABLE table;
ALTER TABLE table_cleaned rename to table;
Run Code Online (Sandbox Code Playgroud)

但第一条语句给出了cannot drop table cals_status because other objects depend on it.

我绝对不想使用,cascade因为它会删除所有相关行。

我怎样才能安全地用干净的副本替换旧表?

按照 Erwin Brandstetter 的建议,这是错误消息的缺失细节:

DETAIL:  default value for column id of table cals_status_deduplicated depends on sequence cals_status_id_seq
Run Code Online (Sandbox Code Playgroud)

postgresql sequence ddl dependencies

4
推荐指数
1
解决办法
370
查看次数

PostgreSQL 语句中的 KEY SHARE OF 是什么意思?

给定以下 SQL,“ONLY”、“OPERATOR(pg_catalog.=)”和“FOR KEY SHARE”有什么作用?

SELECT 1 
FROM ONLY "public"."acmeinstanceinfo" x 
WHERE "widgetid" OPERATOR(pg_catalog.=) $1 
FOR KEY SHARE OF x
Run Code Online (Sandbox Code Playgroud)

我对 Microsoft SQL 服务器有相当多的经验,但对 PostgreSQL 的经验为零。对这个查询正在做什么的任何见解都会很棒。

postgresql amazon-rds

4
推荐指数
1
解决办法
368
查看次数

表大这一事实是否会影响 PostgreSQL 服务器的整体性能?

如果我有一个越来越大的表(即它占用越来越多的存储空间 - 目前为 65GB),这是否会影响 PostgreSQL 服务器的整体性能,例如影响对其他表的查询速度?

这是针对 PostgreSQL 9.6 数据库(我们计划在今年晚些时候升级到 10 -> 11 -> 12),托管在 Google Cloud(用于 PostgreSQL 的 Cloud SQL)上。

postgresql postgresql-performance

4
推荐指数
1
解决办法
368
查看次数

PostgreSQL 是否总是以相同的顺序依次扫描页面?

另一个问题来自我发现EXPLAINPostgreSQL 中很棒的新选项。这一项侧重于BUFFERS选项。

这里是EXPLAIN

EXPLAIN (ANALYZE, BUFFERS) SELECT event_time FROM ui_events_v2  WHERE page ~ 'foo' LIMIT 1;
                                                     QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..1539.68 rows=1 width=8) (actual time=0.858..0.858 rows=1 loops=1)
   Buffers: shared read=10
   I/O Timings: read=0.735
   ->  Seq Scan on ui_events_v2  (cost=0.00..3313394.58 rows=2152 width=8) (actual time=0.857..0.857 rows=1 loops=1)
         Filter: (page ~ 'foo'::text)
         Rows Removed by Filter: 112
         Buffers: shared read=10
         I/O Timings: read=0.735
 Planning Time: 6.455 ms
 Execution Time: 0.877 ms
Run Code Online (Sandbox Code Playgroud)

它非常快 - 这个查询在冷启动时非常慢。这是一个 30M 的行表,有七行page …

postgresql cache

4
推荐指数
1
解决办法
308
查看次数

使用 pg_dump 制作数据库的精确副本的正确方法是什么?

基本上,我正在尝试制作一个 SQL 转储来制作数据库的精确副本:用户定义的函数、关系、约束、表、数据等。

这是可行的pg_dump还是psql需要使用?

我一直在使用pg_dump -U user -cOx database > pg.sql,但我并不完全清楚它是否捕获了所有内容

我正在查看pg_dump这里的所有标志:

https://www.postgresql.org/docs/11/app-pgdump.html

我能想到的唯一一个可能会这样做的,因为它并没有真正明确地说,是-s --schema-only标志,它排除了数据。我对此很好,并pg_dump为数据运行了一秒钟,但我主要想确保我正在备份用户定义的函数、关系等。

postgresql backup pg-dump postgresql-11

4
推荐指数
1
解决办法
275
查看次数

select 查询的非确定性性能,在 10 亿行的表上从 1s 到 60s

我正在尝试调查为什么此查询的性能如此不确定。它可能需要 1 秒到 60 秒及以上的任何时间。查询的本质是选择一个“时间窗口”,并从该时间窗口内获取所有行。

这是有问题的查询,在大约 10 亿行的表上运行:

SELECT CAST(extract(EPOCH from ts)*1000000 as bigint) as ts
    , ticks
    , quantity
    , side
FROM order_book
WHERE ts >= TO_TIMESTAMP(1618882633073383/1000000.0)
    AND ts < TO_TIMESTAMP(1618969033073383/1000000.0)
    AND zx_prod_id = 0
ORDER BY ts ASC, del desc;
Run Code Online (Sandbox Code Playgroud)

这就是表的创建方式

CREATE TABLE public.order_book
(
    ts timestamp with time zone NOT NULL,
    zx_prod_id smallint NOT NULL,
    ticks integer NOT NULL,
    quantity integer NOT NULL,
    side boolean NOT NULL,
    del boolean NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

TO_TIMESTAMP当我走整张桌子时,其中的值将继续向前滑动。以下是EXPLAIN ANALYZE两个不同时间窗口上相同查询的输出: …

postgresql cache explain timescaledb postgresql-performance

4
推荐指数
1
解决办法
91
查看次数

UNIQUE 约束的事务策略?

如何使用基于交易的策略来确保同一地点在同一天不能被多次预订?

有人向我建议,每个隔离级别都会有所不同。你能为他们每个人添加一个例子吗?( read committed,repeatable readserializable)。我想了解他们中的每一个人。

以下是表格和测试数据:

CREATE TABLE place (
  place_id INT                   PRIMARY KEY,
  Name     CHARACTER VARYING(50) NOT NULL,
  Type     CHARACTER VARYING(50) NOT NULL
);

CREATE TABLE visit (
  visit_id SERIAL PRIMARY KEY,
  place_id INT NOT NULL,
  place_dt TIMESTAMP NOT NULL,

  FOREIGN KEY (place_id) REFERENCES place(place_id)
);

INSERT INTO place(place_id, Name, Type
) VALUES
    (1, 'Denali', 'mountain'),
    (2, 'Brindley', 'mountain'),
    (3, 'St. Louis Cathedral', 'church')
;

INSERT INTO visit(place_id, place_dt
) VALUES
    (1, '2019-01-02 10:00'), …
Run Code Online (Sandbox Code Playgroud)

postgresql concurrency transaction isolation-level

4
推荐指数
2
解决办法
250
查看次数