提示 7.x
来自 PostgreSQL 维基
跳转到导航跳转到搜索更改 7.x 版本中的数据库所有者
有几种方法可以实现。其中一种是使用类似于以下的命令行。
pg_dump -U<usuarioViejo> <base> | perl -pe 's/- <usuarioViejo>/- <usuarioNuevo>/g' > db.sql
然后,您可以恢复该文件,并且建议您删除群集中的旧数据库。
另一种方法是使用更多空间(准确地说,是克隆数据库的大小)来创建一个使用之前数据库作为模板的数据库。
CREATE DATABASE pepe TEMPLATE=<viejaBase> OWNER=<nuevoDueño>;
还有另一种方法,如果我们没有足够的备份空间或克隆数据库的空间,该方法包含多个步骤(使用 Bash)。
sudo -u postgres /usr/bin/createuser -a -d <nuevo_usuario> sudo psql -Upostgres <base_de_datos> -c "update pg_database set datdba = ( select usesysid from pg_shadow where usename = '<nuevo_usuario>') where datname = '<base_de_datos>' ;"
我们将数据库中的一组对象(对于使用 '\d' 的表来说已经足够了)导出到一个名为 tablas.dat 的文件中。我们将在这个文件中执行以下操作。
for table in `cat tablas.dat`;do sudo psql -Upostgres <base_de_datos> -c " alter TABLE $table owner to <nuevo_usuario>;";done sudo -u postgres /usr/bin/dropuser <viejo_usuario>
读取物理块错误
通常,当“服务器”突然关闭时,启动时会显示错误“PANIC: Invalid page header in block”。
有一种方法可以忽略块错误。为此,我们必须在 postgresql.conf 中设置(使用下面的 postgresql 服务)“zero_damaged_pages = on”。
现在,设置了此变量后,我们启动 postgres。启动后,我们必须立即使用 pg_dump 工具生成一个“dump”。
完成此任务后,我们将继续关闭 postgres 服务并注释掉第 2 段中添加的行。
现在,我们可以启动 Postgres 并从生成的“dump”中恢复数据库。
注意:zero_damaged_pages 包含在 8.x 中,但页面不可访问性的检测是自动的,并且会自动修复。