标签: postgresql

如何在 Postgres 中每小时做一次增量备份?

尝试对单个 Postgres 服务器(Win7 64)进行每小时增量备份。

我有以下设置postgresql.conf

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'
Run Code Online (Sandbox Code Playgroud)

(重新开始)

我做了一个基本备份 pg_basebackup -U postgres -D ..\foo -F t -x

它在base.tar文件foo夹中创建了一个大文件并添加了一些 16,384 KB 的文件,我认为这些文件是 WAL。

我不明白的是为什么 WALfoo不会改变data/pg_xlog变化中的 WAL 。pg 不应该复制它们吗?它是如何决定这样做的?

也许我需要设置archive_timeout=3600

我见过几个站点(pg 的邮件列表、bacula 的 postgres 页面)说您需要调用 pg_start_backup() 和 pg_stop_backup(),但我相信这些不是必需的。真的吗?

次要问题:

  1. 多久data/pg_xlog写入一次 WAL ?什么触发写入?

    如果我\q在 psql 中执行一些 DML,它似乎会更新 WAL 。或者在 pgAdmin 中编辑一个表,然后关闭窗口。我认为它会在提交时写入。

  2. 最佳实践?pg_basebackup 每周一次?将 …

postgresql backup windows postgresql-9.4

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

PostgreSQL:如何列出访问特定表的所有存储函数

介绍:

PostgreSQL 数据库,包含数百个存储函数,包括过时的、未使用的等。

问题

我需要找出与表 X 有任何关系的所有存储函数 - 因为我想更改表结构。其中一些可能没有使用,所以我不能通过查看代码来做到这一点。

我有 ATM 的解决方案是运行 psql\df+和 grepping 输出,但我更喜欢更像数据库的解决方案,即通过使用信息模式。这肯定是一项重复性的任务,我希望它干净整洁。

有什么建议?

postgresql information-schema

18
推荐指数
2
解决办法
3万
查看次数

无法使用用户 postgres 启动 psql “无法将目录更改为 /home/user ”

我犯了一个愚蠢的错误。我想为文件夹设置 postgres 权限,以便从数据库导出数据。所以我设置了类似的东西sudo chmod 777 -u postgres /home/user,然后我的主分区只有 root 权限,没有 root 权限什么都不能工作。我通过使用解决了这个问题sudo chown user /home/user,然后在Linux上的文件管理器中手动设置权限。这是非常愚蠢的,我不太了解如何为目录和用户分配权限。

现在的问题是,我无法再连接到我的数据库。

 ~ $ sudo -u postgres psql
[sudo] password for user: 
could not change directory to "/home/user"
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我想我想连接到 postgres 用户无法读取的文件夹中。

重新启动服务器也sudo service postgresql restart不起作用。

我正在使用 PostgreSQL 9.1。

postgresql permissions psql

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

何时在 postgres 中使用 JSON 或 JSONB 数组与 SQL 数组

我正在寻找在 JSON 或 JSONB 数组与常规 SQL postgres 数组之间进行选择时要考虑的要点。如果您知道只会将一种数据类型插入数组中,为什么要使用 SQL 数组而不是 JSON 数组?谢谢

postgresql database-design array

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

BEGIN ATOMIC 在 PostgreSQL SQL 函数/过程中意味着什么?

在 PG 14 的文档中,在 参考资料CREATE FUNCTION部分中,手册指出函数的主体LANGUAGE SQL可以是单个语句:

RETURN expression
Run Code Online (Sandbox Code Playgroud)

或一个块:

BEGIN ATOMIC
statement;
statement;
...
statement;
END
Run Code Online (Sandbox Code Playgroud)

没有对该块的语义给出任何解释。这看起来类似于BEGIN ... END;PL/pgSQL 中的块,但似乎有些不同。

在 内 或 外 写一组语句有什么区别BEGIN ATOMIC ... END?什么时候需要使用这样的块?关键字是ATOMIC强制的吗?

postgresql functions postgresql-14

18
推荐指数
1
解决办法
8366
查看次数

排序规则版本不匹配

我复制了一个数据库,它工作正常,但是当我进入复制数据库时,它显示以下消息:

数据库是使用排序规则版本 2.31 创建的,但操作系统提供版本 2.35。

重建此数据库中使用默认排序规则的所有对象并运行 ALTER DATABASE template1 REFRESH COLLATION VERSION,或使用正确的库版本构建 PostgreSQL。

PgPool 也不适用于此复制数据库,它仅在我删除它时才起作用。

尝试登录时 Pgpool 出现以下错误:

child pid 5286: ERROR: unable to read message kind
child pid 5286: DETAIL: kind does not match between main(53) slot[1] (4e)
Run Code Online (Sandbox Code Playgroud)

同样的消息也出现在 postgresql 日志中。

如何重建我的数据库?

postgresql postgresql-15

18
推荐指数
2
解决办法
3万
查看次数

REINDEX 危险吗?

我一直在尝试COUNT(*)使用具有主键的 150,000 行的表。它工具大约 5 分钟,所以我发现这是一个索引问题。

引用PostgreSQL 手册

REINDEX 类似于索引的删除和重新创建,因为索引内容是从头开始重建的。然而,锁定的考虑是相当不同的。REINDEX 锁定索引的父表的写入而不是读取。它还对正在处理的特定索引进行排他锁,这将阻止尝试使用该索引的读取 (...) 随后的 CREATE INDEX 锁定写入但不锁定读取;由于索引不存在,没有读取会尝试使用它,这意味着不会有阻塞,但读取可能会被迫进行昂贵的顺序扫描。

根据你自己的经验,你能告诉:

  • REINDEXING危险的?它会损害数据一致性吗?
  • 可以花很多时间吗?
  • 它是我的场景的可能解决方案吗?

更新:

对我们有用的解决方案是重新创建具有不同名称的相同索引,然后删除旧索引。

索引创建速度非常快,我们已将索引大小从 650 MB 减少到 8 MB。使用COUNT(*)withbetween只需 3 秒。

postgresql

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

将数组或记录传递给 PostgreSQL 中的函数?

我有一项任务是将数组、记录以及在某些情况下的记录数组作为参数传递给 PostgreSQL 中的函数。

postgresql functions array postgresql-9.0 composite-types

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

PostgreSQL 如何在启用 WAL 的备份中间处理检查点?

在 PostgreSQL v9.0 上,我有一个 WAL 归档系统在工作。因此 WAL 文件定期存档(当创建 3 个 WAL 或 WAL 超过 15 分钟时)。

现在我添加 PG_DATA 目录(不包括 pg_xlog 子目录)的二进制包。为此,我执行了pg_start_backup(),二进制副本和pg_stop_backup().

我想我很清楚 pg_start_backup 和 pg_stop_backup 在做什么,第一个创建检查点,最后一个确保最后一个 WAL 文件被存档。

官方文档中我们可以看到对于二进制数据副本我们应该:

使用任何方便的文件系统备份工具执行备份,例如 tar 或 cpio(不是 pg_dump 或 pg_dumpall)。在执行此操作时停止数据库的正常操作既不必要也不可取。

所以我很困惑。这意味着在我们制作副本时可以执行检查点。我看到很多文档说明复制命令应该允许在执行复制时更改数据,我对此没意见,只是找到合适的工具的问题。但我的问题是postgreSQL 将如何处理包含一些不一致文件(一些来自检查点之前,一些来自检查点之后)的 pg_data 内容的恢复

通过重放事务日志 Postgresql 能够将所有这些文件置于正确的状态吗?我看到在执行备份时创建表和删除操作是危险的,是不是有一些像vacuum命令这样的危险操作?pg_backup 是否暂停真空操作?我应该在二进制复制过程开始时复制 global/pg_control 文件吗?我应该使用启用快照的文件系统(如使用 xfs-freeze)来获得更快的恢复过程吗?

我看到备份脚本崩溃不会自动启动 pg_stop_backup,所以我的备份状态有可能会持续很长时间(直到我的 nagios 打电话给某人修复 pg_stop_backup() )。因此,如果这两个命令在 PostgreSQL 中有任何不同,我想知道它,以了解它可能产生的影响。

请赐教。

postgresql backup

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

PostgreSQL 生成 UUID 的两种不同方式:gen_random_uuid 与 uuid_generate_v4?

下面两个函数有什么区别

他们在幕后是一样的吗?使用一个有任何性能影响吗?

postgresql uuid postgresql-extensions

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