标签: postgresql

在没有 WAL 归档的情况下,PostgreSQL 9.1 流式复制是否能赶上?

语境:

假设在 Postgres 9.1 集群上使用流式复制/热备时,备用节点出现故障。它会停留一天,在此期间主服务器上会发生大量 DML。备用数据库的 recovery.conf 不包含“restore_command”条目(用于从 WAL 日志文件恢复),但包含“primary_conninfo”字符串(用于流式复制)。

题:

如果我在主服务器上更改一天后再次启动备用服务器。它是否会仅使用流式复制“赶上”(最终进入反映主服务器的状态)?或者我是否必须启用 WAL 文件归档并让它应用在中断期间归档的文件以确保货币?

我检查了WAL归档/流复制文档在这里,它说,你不必同时启用WAL归档和流复制,但目前还不清楚追赶是否会发生没有WAL文件归档被启用。

谢谢!

postgresql replication

17
推荐指数
1
解决办法
4662
查看次数

表填充因子和索引填充因子的区别

在 Postgres 中,可以为索引和表设置填充因子。有什么不同?如何决定两者的值。有哪些用例?

我正在尝试对空间索引上的空间关系进行聚类。它有几百万条记录。尽管每天创建的新记录很少,但记录一直在更新。

用例是空间范围查询。表填充因子和/或索引填充因子的好值是多少?

postgresql

17
推荐指数
1
解决办法
1万
查看次数

PostgreSQL 中的 (x IS NOT NULL) 与 (NOT x IS NULL)

为什么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)

postgresql null

17
推荐指数
1
解决办法
3269
查看次数

从 GIN 索引的 TSVECTOR 列获取部分匹配

我想通过查询得到结果:

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)

postgresql full-text-search pattern-matching

17
推荐指数
1
解决办法
2万
查看次数

如何在 PostgreSQL 中存储电话号码?

假设我想将电话号码存储在数据库中。我可以接受来自美国以外的电话号码。我将如何存储这些电话号码?

postgresql datatypes data-integrity data-validation

17
推荐指数
1
解决办法
2万
查看次数

单独的月份和年份列,或日期与日期始终设置为 1?

我正在用 Postgres 构建一个数据库,其中将有很多由month和分组的东西year,但永远不会由date.

  • 我可以创建整数monthyear列并使用它们。
  • 或者我可以有一month_year列并始终将其设置day为 1。

如果有人正在查看数据,前者似乎更简单更清晰,但后者很好,因为它使用了正确的类型。

postgresql database-design datetime

17
推荐指数
3
解决办法
7932
查看次数

在 postgresql 中处理磁盘空间已满

我有一个带有 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 postgresql-9.3

17
推荐指数
1
解决办法
2万
查看次数

PostgreSQL 9.6 中不受欢迎的 Nest Loop vs. Hash Join

我在 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)

我为上面使用的表启用了行级安全性。

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

17
推荐指数
1
解决办法
9824
查看次数

如何在 PL/pgSQL 中返回多行记录

我正在尝试使用 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)

postgresql plpgsql postgresql-9.5

17
推荐指数
2
解决办法
5万
查看次数

同一 AWS RDS PostgreSQL 实例中的多个数据库

我在 RDS AWS PostgreSQL 实例中有一个现有数据库。我需要在这个实例中再创建一个数据库,因为启动一个单独的集群会很昂贵。似乎没有任何选项可以在此实例中再创建一个数据库。我知道我可以为此目的创建一个单独的模式(如在 MySQL 中),但我需要将这些资源分开,因此需要一个单独的数据库。

如果可能,请告诉我。PostgreSQL 9.6.5

postgresql aws amazon-rds

17
推荐指数
1
解决办法
3万
查看次数