我有 8 个使用 UUID 主键的表,其中 7 个使用 UUID 外键。使用 BIGSERIAL 而不是 UUID 对性能会更好吗?
我有一个包含大约 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 秒。
有没有办法将整个索引加载到内存中,而不是在第一次访问时获取数据库加载信息?
我对以下输出有疑问:
[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)
以下两条消息代表什么,为什么?我正在询问的消息:
psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)psql (11.7, server 11.8)-顺便说一句,这个psql --version命令我获得以下的输出:
psql (PostgreSQL) 11.8(必须安装才能执行的命令,比如PostgreSQL服务器版本11.7\dt和\l)......并输出如下:Run Code Online (Sandbox Code Playgroud)postgres=# select * FROM version(); version -------------------------------------------------------------------------------------------------------- PostgreSQL 11.8 on x86_64-pc-linux-gnu, …
我创建了一个table_cleanedliketable并从tableinto插入了唯一值table_cleaned。现在我想更换table与table_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 的建议,这是错误消息的缺失细节:
Run Code Online (Sandbox Code Playgroud)DETAIL: default value for column id of table cals_status_deduplicated depends on sequence cals_status_id_seq
给定以下 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 的经验为零。对这个查询正在做什么的任何见解都会很棒。
如果我有一个越来越大的表(即它占用越来越多的存储空间 - 目前为 65GB),这是否会影响 PostgreSQL 服务器的整体性能,例如影响对其他表的查询速度?
这是针对 PostgreSQL 9.6 数据库(我们计划在今年晚些时候升级到 10 -> 11 -> 12),托管在 Google Cloud(用于 PostgreSQL 的 Cloud SQL)上。
另一个问题来自我发现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 …
基本上,我正在尝试制作一个 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为数据运行了一秒钟,但我主要想确保我正在备份用户定义的函数、关系等。
我正在尝试调查为什么此查询的性能如此不确定。它可能需要 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两个不同时间窗口上相同查询的输出: …
如何使用基于交易的策略来确保同一地点在同一天不能被多次预订?
有人向我建议,每个隔离级别都会有所不同。你能为他们每个人添加一个例子吗?( read committed,repeatable read和serializable)。我想了解他们中的每一个人。
以下是表格和测试数据:
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 ×10
cache ×3
amazon-rds ×1
backup ×1
bash ×1
concurrency ×1
ddl ×1
dependencies ×1
explain ×1
index ×1
pg-dump ×1
primary-key ×1
psql ×1
scripting ×1
sequence ×1
timescaledb ×1
transaction ×1
uuid ×1