删除列操作是否可扩展?
以前,我们在更新大量记录时遇到问题,因为它占用了更多空间。
删除列操作是否就是这种情况?
删除列操作是否可扩展?
以前,我们在更新大量记录时遇到问题,因为它占用了更多空间。
删除列操作是否就是这种情况?
目前,我们在单个 postgres 实例中托管多个数据库。
我们希望限制该数据库实例中特定数据库/用户的 CPU 使用率。
是否可以在 postgres 中进行这些资源管理操作?
PostgreSQL 咨询锁中的密钥空间是所连接的数据库私有的,还是在数据库集群中共享的?
四处搜寻https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS和https://www.postgresql.org/docs/current/explicit-locking.html#ADVISORY- LOCKS的答案似乎并不明显。
在这里的示例中:https://www.percona.com/blog/postgresql-column-alignment-and-padding-how-to-improve-performance-with-smarter-table-design/
为什么 PostgreSQL 不在int2
in之后添加 2 个字节填充t2
以正确对齐单词?
我正在查看 Postgres 中的复制。我们同时进行逻辑和二进制。我执行select * from pg_stat_replication order by state;
并查看发送/写入/刷新/重播 lsn 值。它们的外观31855/17CB26A8
和价值观随着时间的推移而进步。
为了获得当前位置,我执行了 a select pg_current_wal_lsn();
,它位于319E1/73CDD590
。
我的问题是,随着值的前进,它们几乎达到当前位置,然后“翻转”并重新开始。这是正常的吗?
我使用的是 v13.10。
我的问题涉及一个生产事件,其中有必要更换VIEW
负载下性能不佳的 Postgres。我们多次尝试重新定义VIEW
使用CREATE OR REPLACE
;但这并不成功,因为 DDL 查询被许多其他SELECT
查询阻止。然后,就在我们将生产数据库切换到副本(绝望之举)之前,我们尝试了 DROP,它似乎几乎立即成功了。然后我们就可以创建视图了。这一事件引起了一些争议,因为我们找不到任何文档来区分 CREATE OR REPLACE 和 DROP, then CREATE 的锁定行为。有些人想知道:这真的发生过吗?希望熟悉 Postgres 内部结构的人能得到一些见解。
我们在主数据库中有一个表,该表正在逻辑上复制到另一个名为 SOR 的数据库。我们需要重命名该表,并将一堆表添加到主数据库上的发布中。我尝试过这个程序
ALTER SUBSCRIPTION my_subscription REFRESH PUBLICATION WITH (copy_data=false);
我等待主数据库上的复制槽清理干净,然后检查记录计数,SOR DB 在这个时间窗口内丢失了一些数据。是否有一种无缝方法可以在逻辑复制中重命名表而不会丢失订阅者端的数据?有助于(copy_data=true)
?
谢谢 !
更多细节:
假设我们有下表:
CREATE TABLE names(
id SERIAL NOT NULL,
CONSTRAINT names__pk PRIMARY KEY(id),
name TEXT NOT NULL,
CONSTRAINT names__name__unq UNIQUE(name)
);
INSERT INTO names(name)
VALUES('apple')
ON CONFLICT(name) DO NOTHING
RETURNING id;
当行不存在时,RETURNING
子句起作用,但如果已经存在行,则查询不返回任何内容。有没有办法修改查询,使其始终返回字段id
?
我试图从 Postgres 数据库中提取一些统计信息,并进行了以下查询:
SELECT
city,
job_count,
TO_CHAR(job_count * 100 / SUM(job_count) OVER (), '90D00%') AS job_share
FROM (
SELECT
localities.name as city,
COUNT(*) AS job_count
FROM jobads
JOIN localities ON jobads.locality_uuid = localities.uuid
WHERE jobads.external = true
GROUP BY localities.name
ORDER BY job_count DESC
) AS job_count_table;
这是它返回的结果:
city | job_count | job_share
-----------------------+-----------+-----------
City #1 | 1300 | 13.00%
City #2 | 700 | 7.00%
City #3 | 400 | 4.00%
...
City #1200 | 1 | 0.01%
(1200 rows)
它返回数百行,其中大多数的作业数量非常少。我想将所有job_count
小于 100 的行合并到一行中,这样输出将如下所示:
city | job_count | job_share
-----------------------+-----------+-----------
City #1 | 1300 | 13.00%
City #2 | 700 | 7.00%
City #3 | 400 | 4.00%
Other cities | 2000 | 20.00%
(4 rows)
知道我该怎么做吗?
在另一个表发生更改后,如何自动更新一个表?
说(请见下文)我有一张桌子countries
,还有一张桌子cities
。如何使在表中添加城市时cities
,total
表中的列自动更新(对应城市的增量)countries
?
BEGIN; INSERT INTO cities VALUES ('Tokyo', 'Japan'); UPDATE countries SET total=1 WHERE name='Japan'; COMMIT;
,但是自动的,添加时执行 acountries.the_city.total++
cities.the_city
。
postgres=# SELECT * FROM countries;
name | total
-------+-------
USA | 0
Japan | 0
(2 rows)
postgres=# SELECT * FROM cities;
name | country
------+---------
(0 rows)
CREATE DATABASE geo;
\c geo;
CREATE TABLE countries (
name VARCHAR(15) PRIMARY KEY,
total int
);
CREATE TABLE cities (
name VARCHAR(15),
country VARCHAR(15),
FOREIGN KEY (country) REFERENCES countries(name)
);
标准 SQL 或 Postgres v16