语境:
假设在 Postgres 9.1 集群上使用流式复制/热备时,备用节点出现故障。它会停留一天,在此期间主服务器上会发生大量 DML。备用数据库的 recovery.conf 不包含“restore_command”条目(用于从 WAL 日志文件恢复),但包含“primary_conninfo”字符串(用于流式复制)。
题:
如果我在主服务器上更改一天后再次启动备用服务器。它是否会仅使用流式复制“赶上”(最终进入反映主服务器的状态)?或者我是否必须启用 WAL 文件归档并让它应用在中断期间归档的文件以确保货币?
我检查了WAL归档/流复制文档在这里,它说,你不必同时启用WAL归档和流复制,但目前还不清楚追赶是否会发生没有WAL文件归档被启用。
谢谢!
在 Postgres 中,可以为索引和表设置填充因子。有什么不同?如何决定两者的值。有哪些用例?
我正在尝试对空间索引上的空间关系进行聚类。它有几百万条记录。尽管每天创建的新记录很少,但记录一直在更新。
用例是空间范围查询。表填充因子和/或索引填充因子的好值是多少?
为什么x IS NOT NULL不等于NOT x IS NULL?
这段代码:
CREATE TABLE bug_test (
id int,
name text
);
INSERT INTO bug_test
VALUES (1, NULL);
DO $$
DECLARE
v_bug_test bug_test;
BEGIN
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL);
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL);
RAISE NOTICE '%: %', v_bug_test, (NOT v_bug_test IS NULL);
SELECT *
INTO v_bug_test
FROM bug_test
WHERE id = 1;
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL);
RAISE NOTICE '%: …Run Code Online (Sandbox Code Playgroud) 我想通过查询得到结果:
SELECT * FROM (
SELECT id, subject
FROM mailboxes
WHERE tsv @@ plainto_tsquery('avail')
) AS t1 ORDER by id DESC;
Run Code Online (Sandbox Code Playgroud)
这有效并返回tsv包含包含的行Available。但是如果我使用avai(dropped lable) 它找不到任何东西。
所有查询都必须在字典中吗?我们不能只查询这样的字母吗?我有一个包含电子邮件正文(内容)的数据库,我希望随着它每秒增长而使其快速增长。目前我正在使用
... WHERE content ~* 'letters`
Run Code Online (Sandbox Code Playgroud) 假设我想将电话号码存储在数据库中。我可以接受来自美国以外的电话号码。我将如何存储这些电话号码?
我正在用 Postgres 构建一个数据库,其中将有很多由month和分组的东西year,但永远不会由date.
month和year列并使用它们。month_year列并始终将其设置day为 1。如果有人正在查看数据,前者似乎更简单更清晰,但后者很好,因为它使用了正确的类型。
我有一个带有 postgresql 9.3.10 后端的 Django Web 应用程序(位于 Linux 操作系统中)。我遇到了磁盘已满错误,因此即使我尝试截断表,我也会收到以下错误:
ERROR: could not extend file "base/30137/33186048": No space left on device
HINT: Check free disk space.
Run Code Online (Sandbox Code Playgroud)
我无法轻松地向服务器添加更多磁盘空间,也无法删除此 VM 上的内容。但是,有几个表是截断的候选表,但似乎我现在也无法截断它们。
谁能给我建议我可以在这里做什么?这严重影响了我的生产服务器,我在这里有点意外的 DBA,所以完全被难住了。
我在 PostgreSQL 9.6 查询计划方面遇到了麻烦。我的查询如下所示:
SET role plain_user;
SELECT properties.*
FROM properties
JOIN entries_properties
ON properties.id = entries_properties.property_id
JOIN structures
ON structures.id = entries_properties.entry_id
WHERE structures."STRUKTURBERICHT" != ''
AND properties."COMPOSITION" LIKE 'Mo%'
AND (
properties."NAME" LIKE '%VASP-ase-preopt%'
OR properties."CALCULATOR_ID" IN (7,22,25)
)
AND properties."TYPE_ID" IN (6)
Run Code Online (Sandbox Code Playgroud)
我为上面使用的表启用了行级安全性。
用set enable_nestloop = True,查询规划运行嵌套循环用约37秒的总运行时间加入:https://explain.depesz.com/s/59BR
with set enable_nestloop = False,采用Hash Join方式,查询时间约0.3秒:https : //explain.depesz.com/s/PG8E
我VACUUM ANALYZE在运行查询之前做过,但没有帮助。
我知道这不是一个好的做法set enable_nestloop = False,对于计划者来说,还有任何其他类似的选择。但是我怎样才能“说服”规划器在不禁用嵌套循环的情况下使用散列连接?
重写查询是一种选择。
如果我在绕过 RLS 的角色下运行相同的查询,那么它的执行速度非常快。行级安全策略如下所示:
CREATE POLICY properties_select …Run Code Online (Sandbox Code Playgroud) postgresql performance join row-level-security postgresql-9.6 query-performance
我正在尝试使用 RECORD 数据类型返回多个记录,有没有一种方法可以附加到 RECORD 并在每次迭代时向该 RECORD 添加/附加一个新值。
也就是说,我要追加到rec使rec成为一组行,当循环结束,我可以只返回在我的函数结束。目前,我正在这样做 -
SELECT temp_table.col1, temp_table.col2, temp_table.col3
INTO rec
FROM temp_table
WHERE temp_table.col3 = false;
Run Code Online (Sandbox Code Playgroud)
我的完整代码在这里:
CREATE OR REPLACE FUNCTION validation()
RETURNS RECORD AS $$
DECLARE
rec RECORD;
temp_row RECORD;
BEGIN
CREATE TEMPORARY TABLE temp_table (col1 TEXT, col2 INTEGER, col3 BOOLEAN) ON COMMIT DROP;
FOR temp_row IN SELECT * FROM staging.validation
LOOP
RAISE NOTICE 'sql: %', temp_row.sql;
EXECUTE format('INSERT INTO temp_table %s', temp_row.sql);
IF (SELECT DISTINCT temp_table.col3 FROM temp_table WHERE …Run Code Online (Sandbox Code Playgroud) 我在 RDS AWS PostgreSQL 实例中有一个现有数据库。我需要在这个实例中再创建一个数据库,因为启动一个单独的集群会很昂贵。似乎没有任何选项可以在此实例中再创建一个数据库。我知道我可以为此目的创建一个单独的模式(如在 MySQL 中),但我需要将这些资源分开,因此需要一个单独的数据库。
如果可能,请告诉我。PostgreSQL 9.6.5
postgresql ×10
amazon-rds ×1
aws ×1
datatypes ×1
datetime ×1
join ×1
null ×1
performance ×1
plpgsql ×1
replication ×1