在 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
强制的吗?
我需要编写一个 shell/bash 脚本来自动更改一些 PostgreSQL 配置。
这是我写的命令:
sudo -u postgres psql -U postgres -d postgres -c "
ALTER SYSTEM SET listen_addresses = '127.0.0.1';
ALTER SYSTEM SET max_connections = '200';
ALTER SYSTEM SET shared_buffers = '24GB';
ALTER SYSTEM SET work_mem = '128MB';
...
"
Run Code Online (Sandbox Code Playgroud)
但是我收到这个错误:
ERROR: ALTER SYSTEM cannot run inside a transaction block
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个错误?
假设我的 PostgreSQL 实例突然异常停止,并且数据是脏的并且没有保存在 RAM 或 WAL 中。那样的话会发生什么?
我可以从哪里恢复这些数据?如果服务器也关闭,在这种情况下脏数据会发生什么?
是否有任何单独的文件来存储脏数据以进行恢复?
postgresql database-design postgresql-performance postgresql-13 postgresql-14
我们考虑了一些选项来将我们的 Postgres 服务器从当前 ( 10
) 版本升级到最新 ( 14
) 版本。我们决定不在主服务器上做任何事情 - 因为我们需要使用链接选项(所以就地,而不是复制),并且如果我们在新的 postgres 服务器启动后看到问题,我们无法回滚。我们认为首先进行复制会更安全。
pg_upgrade
因此,我们计划使用复制来进行升级。这是我们到目前为止的计划:
pg_upgrade
复制,然后启动它(逻辑复制将继续)在继续之前我有一些问题:
streaming replication
到logical replication
升级前的机制?在这样做之前有什么需要考虑的吗?pg_upgrade
完成?我知道这取决于各种参数,但是根据数据大小约为 600 GB 的事实进行粗略估计吗?由于这是复制所需的停机时间 - 所以没有备份。在继续升级之前,请寻求有关这些问题的一些指导。