如何篡改 PostgreSQL 系统数据

此方法可能带来严重后果,请务必谨慎使用。

这种操作能力的出处来自 initdb,具体请看 initdb.c 源代码。

static const char *backend_options = "--single -F -O -c search_path=pg_catalog -c exit_on_error=true";

在清楚自己要做什么的前提下,它可能会带来一些福利,否则恐怕只有老天爷知道会发生什么,请务必谨慎使用。

1、如果我们试图修改 pg_catalog,会收到如下提示

ERROR:  permission denied to create "pg_catalog.xxx"
DETAIL:  System catalog modifications are currently disallowed.

2、进入具有修改数据库系统表的命令行

./postgres --single -F -O -c search_path=pg_catalog -c exit_on_error=true -D ../data flying

这里 search_path=pg_catalog 是操作的目标 namespace(也就是外在表现的 schema 自行查阅文档),这就是文档中的 search_path 参数。

exit_on_error=true 遇到错误立即退出

最后一个为数据库名

3、创建 / 修改 / 操作 某个对象

4、退出

如果我们设置了 exit_on_error=true,可以随便输入一个出错的命令即可结束。

最安全的办法 Ctrl + D


--------------------------------------------
神州飞象(北京)数据科技有限公司
我们的力量源自最先进的开源数据库PostgreSQL
[email protected]


你可能感兴趣的:(如何篡改 PostgreSQL 系统数据)