0

我不确定这开始发生的确切时间(我相信它可能是在第一次启动 pgadmin3 之后)。基本上这似乎突然发生,一切似乎都配置正确..

PostgreSQL 似乎不再遵循 search_path 来定位我的表。

\d
No relations found.

我的搜索路径已设置(一直如此):

SHOW search_path;
"public, myschema1, myschema2"
(1 row)

我不仅是相关表格的所有者,而且还运行过:

GRANT ALL ON SCHEMA public to myusername;
GRANT ALL ON SCHEMA myschema1 to myusername;
GRANT ALL ON SCHEMA myschema2 to myusername;

数据都在那里。我可以在运行 \dn 时看到模式。如果我完全限定模式和表名,我也可以运行查询。最大的问题是已经创建的引用非限定表名的函数将不起作用。

谁能想到我可能没有尝试过的东西?关于是什么导致这个问题开始发生的任何想法?

谢谢你的帮助!-高科技

4

2 回答 2

1

可能您将 search_path 作为一个字符串输入

postgres=# 将 search_path 设置为 public, s1;
放
postgres=# 显示搜索路径;
 搜索路径
-------------
 公共, s1
(1 行)

postgres=# 将 search_path 设置为 'public, s1';
放
postgres=# 显示搜索路径;
 搜索路径  
--------------
 “公共,s1”
(1 行)

第二个设置是错误的,不起作用。

于 2013-07-31T19:38:31.970 回答
0

我通过GRANT解决了类似的问题,该用户USAGE ON SCHEMA以OWNER的身份登录该架构。让我开发:

用户故事:我可以使用 Postgres 9.6 重现这种奇怪的行为,请参见下面的控制台输出。那有多奇怪?我可以\dt preprod.users,但\dt不会发出任何东西!我也可以在这些表上选择,这真的让我很困惑。

(在search_path中,注意逗号后面的空格,由PostgreSQL自动调整)

do_preprod=> -- I'm logged on as preprod_www_ro, a read-only user who belongs to readonly ROLE.
do_preprod=> SET search_path TO preprod,public;
SET
do_preprod=> SHOW search_path;
   search_path
-----------------
 preprod, public
(1 row)
do_preprod=> \dt
Did not find any relations.
do_preprod=> \dt users;
Did not find any relation named "users".
do_preprod=> \dt preprod.users;
           List of relations
 Schema  | Name  | Type  |    Owner
---------+-------+-------+-------------
 preprod | users | table | preprod_www
(1 row)

然后,以preprod_www(= 架构所有者)身份登录,我授予readonlyROLE ( preprod_www_ro's)USAGE权限。do_preprod=> GRANT USAGE ON SCHEMA preprod to readonly;

然后,回到preprod_www_ro,我可以立即看到与 的关系\dt,完全享受我的search_path,而无需注销重新登录。

首先,我希望 PostgreSQL 发出更清晰的消息\dt,或者\dt preprod.users:“No USAGE ON SCHEMA grant...”或类似的东西,因为实际上用户可以使用它...但并不完全顺利。

于 2019-09-04T03:16:01.093 回答