无法将PostgreSQL数据库复制到新服务器,出现错误[未识别的参数“row_security”]。

15

我是PostgreSQL的新手。我已经成功创建了数据库,将“philipyoung”——我的ID设置为超级用户,并使用以下命令将本地数据库复制到elephantsql中的新服务器。

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

然后发生以下错误:

SET
SET
SET
SET 
SET
ERROR: unrecognized configuration parameter "row_security"
ERROR: permission denied to create database
ERROR: role "philipyoung" does not exist
FATAL: no pg_hba.conf entry for host "xxx.xxx.xxx.xx", user "xxxx", database "xxxx", SSL on

任何帮助都将不胜感激

2个回答

10

"row_security"错误可能是因为本地的PostgreSQL版本比远程端的新。除非你在使用该功能,否则这不是问题。

"permission denied"和"user X does not exist"错误就是导致操作失败的原因。你试图将数据库恢复为一个没有权限在远程服务器上创建数据库的用户。然后它找不到相关用户,在远程访问中也没有设置该用户。

用户在数据库之间共享而不是被复制到数据库中。

所以,你需要像下面这样做:

  1. 在远程服务器上以"postgres"身份登录,并"CREATE USER x ..."。
  2. 以"postgres"用户身份在远程服务器上恢复数据库,然后它应该能够将所有权设置为你想要的用户。

如果你不想授予远程访问你的数据库,可以创建ssh隧道(互联网上有很多示例),或者先转储到文件(使用"-Fc"进行自定义,压缩格式)并将其复制到远程机器上。

如果可能,尽量在两个服务器上运行相同版本的PostgreSQL。如果它们确实需要通信,这样会更容易处理。


感谢你的解决方案,Richard!在本地版本上降级我的Postgre版本就解决了问题。在完全不同的情境下,我使用免费的Heroku服务来学习真实世界场景下的RESTful API。由于我使用的是免费计划,他们没有给予克隆本地数据库的权限。是否有可能将所有表克隆到提供的在线数据库中?谢谢! - Philip Young
很抱歉,我不是Heroku的用户 - 你需要阅读他们的文档。假设你不能在Heroku端安装任何东西,那么你要么最终会删除远程端上的所有数据并重新上传,要么编写自己的差异生成脚本。 - Richard Huxton

0
我也遇到了相同的问题.. 数据库是Postgres 9.4,我使用了来自9.5的pgdump和psql。在尝试导入转储文件时遇到了很多问题。 图片

肯定可以解决这个问题,因为如果你使用客户端版本9.5导出(转储)数据库,它会在脚本中添加一个标志/命令,而这个标志/命令不受9.4支持。 - Vape

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接