添加跨模式外键:
ALTER TABLE "editedArticles"
ADD CONSTRAINT "editedArticles_articles_foreign"
FOREIGN KEY("originalArticleId") REFERENCES "private".articles("id");
失败:
ERROR: 42501: permission denied for table articles
即使成功执行:
GRANT USAGE ON SCHEMA private TO postgres;
GRANT SELECT, REFERENCES ON TABLE private."articles" TO postgres;
我似乎遇到了与这个未解答的问题中提到的同样的问题。
以下是记录:
SELECT current_user;
返回postgres
\du+ postgres
返回Create role, Create DB, Replication, Bypass RLS
最后:
postgres=> \dn+ private
List of schemas
Name | Owner | Access privileges | Description
---------+----------+---------------------------+-------------
private | postgres | postgres=UC/postgres +|
| | digest=UC/postgres +|
| | supabase_admin=U/postgres |
(1 row)
postgres=> \z private.articles
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
---------+----------+-------+-------------------------------+-------------------+----------
private | articles | table | digest=arwdDxt/digest +| |
| | | supabase_admin=arwdDxt/digest+| |
| | | postgres=r/digest | |
(1 row)
注意,postgres=r/digest
只有r
该表的(读)权限,没有x
(引用)权限。但为什么呢?我执行了GRANT REFERENCES
(如上所述)。
事实证明该命令:
当使用我的用户执行时,返回“成功。没有返回任何行”
postgres
,但实际上它什么也没做!但如果我使用digest
用户(拥有private.articles
表的用户)执行它,则它返回“GRANT”,现在它可以正常工作了。