提示 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 中,但页面不可访问性的检测是自动的,并且会自动修复。