我正在尝试将一些表从 9.5 beta 2 转储到 9.4.4 服务器。我使用的命令形式是相当标准的:
pg_dump -t table dbname | psql -h hostname -d dbname
我正在使用 Postgres 用户,我意识到这可能并不理想,但因为它们都是只有我使用的开发数据处理框,并且与随后的错误有关。最初,我得到了错误
错误:无法识别的配置参数“row_security”
这是预期的,因为这个功能是 9.5 中的新功能,而且,是的,我意识到在不同 Postgres 版本之间使用 pg_dump 是不可取的,但是,遗憾的是,这是不可避免的,因为我遇到了一个非常模糊的错误,并且需要移动一个大的静态数据量一次。
因此,使用这个可怕的 hack 删除 row_security 错误,并在第一个错误时打开 stop:
pg_dump -t tablemame dbname |sed 's/SET row_security = off;//'|
psql -v ON_ERROR_STOP=1 -h hostname -d dbname
我现在得到:
错误:创建“pg_catalog.tablename”的权限被拒绝 详细信息:当前不允许修改系统目录
虽然可能不希望使用 Postgres 用户/角色,但我的理解是不应该存在这种性质的权限问题。我愿意接受任何建议,记住这是一次性操作,并且这些是未连接到任何实时服务的数据处理开发盒,因此权宜之计优于理想的公司数据访问策略。话虽如此,最好了解如何正确执行此操作并在将来避免这种情况。
事实证明,这是由于当您使用 pg_dump 转储的模式在目标数据库/机器上不存在时发生的有点模糊的错误消息。我会留下这个问题,希望它可以帮助别人。