Postgresql Ubuntu奇怪的行为(版本不兼容?)

时间:2016-05-06 09:57:43

标签: postgresql ubuntu pgadmin postgresql-9.5 ubuntu-16.04

我试图在Ubuntu 16.04 LTS上运行postgresql数据库。

首先,我使用安装了9.5.1版本的sudo apt-get install postgresql安装了postgres。然后我创建了另一个用户和一个新数据库。我已将新数据库的所有权限授予新用户,并将所有者也设置为新用户。

我连接到新数据库并通过使用\i /path/to/dump.sql恢复从另一个数据库(具有postgresql版本9.2)创建的普通备份(转储)来填充它。我没有错误,当我输入\dt时,我得到了包含表格的列表。

问题是:当我现在断开连接(\q)并重新连接(与之前我连接时相同,sudo psql -U "username" dbname)并再次输入\dt时,它会显示"没有发现任何关系"。当我再次尝试填充它时,我收到了一些错误,例如"关系关系名已经存在"。

当我尝试使用pgAdmin(通过sudo apt-get install pgadmin3安装)时,会出现另一个问题/症状。尝试使用localhost进行连接时,我无法使用新创建的用户(我可以从终端连接)进行连接。 但是我可以使用postgres 连接我通过终端设置的密码我没有看到任何我从pgAdmin tho 命令行手动创建的数据库。

所以是的,我的猜测是至少有一个问题可能是9.2和9.5之间的版本不兼容。有没有办法测试/解决这个问题?但我也认为应该有其他问题。

1 个答案:

答案 0 :(得分:1)

如果SQL转储包含SET search_path TO...命令,将其设置为与用户默认值不同的值,则可能会出现您所描述的内容。

因此,它不仅会在该模式中创建其表和其他对象,而且会在会话的其余部分保留search_path,因此当您在同一会话中执行\dt时,它确实看到并列出了新创建的表格。

但是当您退出并重新输入psql时,此search_path不再有效,您将返回到您的用户的默认search_path,该用户可能无法访问该架构,因此{ {1}}不再“看到”任何表格。

您可以使用\dt在psql会话中检查此设置,并在SQL文件中使用grep“SET search_path”来检查它的设置。

根据评论,似乎就是这样:转储将表创建到用户默认搜索路径之外的架构中。

该用户无缝工作的可能解决方案是更新其搜索路径,以便始终首先达到此架构。这可以通过以下方式完成:

show search_path

其中ALTER USER username SET search_path TO schema1,"$user",public; 是SQL转储引用的内容以及它创建表的位置。