使用 postgreSQL 10 或 11,创建具有相同名称的临时表是否安全,每个表都携带不同的数据?我不打算在任何会话/连接/交易之间共享数据。名称本身并不重要,但我想避免为每个需要此类中间表的并发查询生成随机名称的麻烦。
临时表仅用于不同的SELECT查询。它将在每个带有该ON COMMIT DROP子句的事务结束时删除。
PostgreSQL文档说明:
当临时表存在时,具有相同名称的现有永久表对当前会话不可见,除非它们被模式限定名称引用。
我不清楚这是否也适用于临时表。
postgresql transaction temporary-tables postgresql-10 postgresql-11
我有下表:
CREATE TABLE orders
(
info_date date,
country_code VARCHAR,
order_total int,
CONSTRAINT orders_pk PRIMARY KEY (info_date, country_code)
) PARTITION BY LIST (country_code);
CREATE TABLE orders_def PARTITION OF orders DEFAULT;
Run Code Online (Sandbox Code Playgroud)
我插入一些行country_code 'foo',它们最终位于默认分区中。
一段时间后,我决定应该'foo'有自己的分区,我该怎么做?
根据文档:
如果存在 DEFAULT 分区,并且 DEFAULT 分区中存在任何行,否则它们将适合要添加的新分区,则无法添加新分区。
这是我的尝试:
begin;
CREATE TEMP TABLE temp_table ON COMMIT DROP AS
SELECT * FROM orders where country_code = 'foo';
DELETE FROM orders where country_code = 'foo';
CREATE TABLE orders_foo PARTITION OF orders FOR VALUES IN ('foo');
INSERT INTO …Run Code Online (Sandbox Code Playgroud) postgresql migration partitioning default-value postgresql-11
我是 postgres 新手,我有 aws rds 实例运行 postgresql 引擎版本 11.5。
我所有的查询都是 clientRead 有 wait_event。为什么我的所有查询都处于空闲状态。这是否意味着它们在事务中处于空闲状态?
我应该采取哪些步骤来解决这个问题?
例如,如果我将idle_in_transaction_session_timeout更改为10分钟,它会解决这个问题吗?
select count(*),state FROM pg_stat_activity group by 2;
count | state
-------+--------
5 |
1 | active
451 | idle
Select pid, datname, usename, wait_event_type, wait_event, backend_type FROM pg_stat_activity where state='idle';
pid | datname | usename | wait_event_type | wait_event | backend_type
-------+----------+--------------------------+-----------------+------------+----------------
14797 | xxxxx | user | Client | ClientRead | client backend
SELECT current_setting('idle_in_transaction_session_timeout');
current_setting
-----------------
1d
(1 row)
Run Code Online (Sandbox Code Playgroud) 假设您在 PostgreSQL 11 中有一个表,其中包含如下所示的值集。
12 18
11 12
5 12
9 18
7 19
14 18
11 16
6 12
4 11
5 9
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在不使用子选择的情况下进行选择,或者通过使用函数或触发器/函数来查找每个值低于先前值或可能高于先前值的位置,但此示例低于先前值(可能是 2 行或15+ 行)在列和第一列中都高于最后一行或第一列和第二列以终止选择,使条件为正?
我不知道如何在选择中包含当前变量。如果我可以回顾变量那么我应该能够做到这一点。我想知道是否有人遇到过这个问题,并使其在选择中工作,或者他们在数据库之外进入 GoLang / Python / C++ / Perl / PHP / 等。一旦我离开数据库,做起来非常简单,但我我真的很想将其保留在 PostgreSQL 11 中。
我知道我可以用这个列出所有序列:
SELECT * FROM information_schema.sequences;
Run Code Online (Sandbox Code Playgroud)
但我需要知道这个序列被哪个表使用。
我想这样做的原因是为了找出哪些PRIMARY KEYs序列不是默认格式的table_name_id_seq
这可能吗?
注意:我的 PostgreSQL 版本是 11.5。
我使用以下命令在 PostgreSQL 11.6(带有 TimescaleDB 1.60 扩展)中创建了数据库的备份pg_dump:
PGPASSWORD=mypassword pg_dump -h 127.22.0.4 -p 5432 -U postgres -Z0 -Fc database_development
Run Code Online (Sandbox Code Playgroud)
并将其恢复到运行相同版本的 PostgreSQL 11.6(带有 TimescaleDB 1.60 扩展)的新服务器pg_restore。对于恢复,以psql用户身份执行以下命令postgres:
CREATE DATABASE database_development;
\c database_development
CREATE EXTENSION timescaledb;
SELECT timescaledb_pre_restore();
\! time pg_restore -Fc -d database_development /var/lib/postgresql/backups/database_development_2020-02-29
SELECT timescaledb_post_restore();
Run Code Online (Sandbox Code Playgroud)
原始数据库的数据库大小为 389 GB,但恢复的数据库为 229 GB。这些尺寸是通过运行获得的
select pg_size_pretty(pg_database_size('database_development'))
Run Code Online (Sandbox Code Playgroud)
一些差异:
旧数据库存储在 ext4 分区上,而新数据库存储在禁用压缩的 ZFS 文件系统上。两个数据库实例都在具有 Ubuntu 18.04 主机的 Docker 容器内运行。
问题:我们如何解释数据库大小的差异?pg_dump和期间都没有遇到错误pg_restore。
我们一直在努力重启停电后关闭的数据库集群服务器。我们尝试过 systemctl 、 pg_ctl 和 pg_ctlcluster 命令,但我们总是遇到同样的错误。
目录“/var/lib/postgresql/11/main”不是数据库集群目录
在我们的配置文件(postgresql.conf)中提到了相同的路径:
data_directory = '/var/lib/postgresql/11/main'
我无法理解为什么我们会收到此错误,即使服务器在断电之前以相同的配置运行。
这是我们的生产服务器。
我输入这些命令的命令行是:
我在一台服务器上有数据库和表 collection_city 。它有 21 行。我在第二台服务器上有数据库和表 collection_city 。它也有 21 行。
他们都有这一行:
tinker=# table collection_city;
id | name | alias | postal_code | region_id
----+---------------+--------------+-------------+-----------
2 | Obrenovac | obrenovac | | 1
Run Code Online (Sandbox Code Playgroud)
id 列是主键。
我在第一台服务器上创建了发布:
CREATE PUBLICATION tinkerpub FOR ALL TABLES;
tinker=# \dRp[+]
Publication tinkerpub
Owner | All tables | Inserts | Updates | Deletes | Truncates
----------+------------+---------+---------+---------+-----------
postgres | t | t | t | t | t
(1 row)
Run Code Online (Sandbox Code Playgroud)
我在第二台服务器上创建了订阅:
CREATE SUBSCRIPTION tinkersub CONNECTION 'dbname=tinker host=192.168.150.5 user=postgres password=test port=5432' …Run Code Online (Sandbox Code Playgroud) postgresql replication master-slave-replication postgresql-11
postgresql ×8
amazon-rds ×1
backup ×1
migration ×1
partitioning ×1
pg-dump ×1
pg-restore ×1
replication ×1
select ×1
transaction ×1