postgresql - 由同一组的用户拥有的 ALTER postgres 表

标签 postgresql

有很多类似的问题,但我仍然无法理解一些简单的关于 postgres 的 ALTER、DROP、角色和权限。

我想要一个包含属于同一组的多个用户的数据库。当其中一个用户创建了一个表时,其他人应该能够像他们自己创建的那样使用它。我可以让它在某种程度上起作用,但 ALTER 和 DROP 仍然是个谜。

例如,我从头开始创建一个有两个用户的数据库:

CREATE DATABASE test_db;
\c test_db 

CREATE ROLE alice LOGIN INHERIT;
CREATE ROLE bjork LOGIN INHERIT;

然后我创建一个组并将用户分配到该组:

CREATE ROLE scientists;
GRANT scientists TO alice;
GRANT scientists TO bjork;
ALTER DEFAULT PRIVILEGES FOR ROLE alice GRANT ALL ON TABLES to scientists;
ALTER DEFAULT PRIVILEGES FOR ROLE bjork GRANT ALL ON TABLES to scientists;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES to scientists;

alice 创建一个表:

\c - alice
CREATE TABLE test_table (column_a TEXT);

bjork 可以读、写,但既不能ALTER,也不能DROP:

\c - bjork 
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR:  must be owner of relation test_table

SETROLE 设置为 scientists 也无济于事(也不应该,因为 INHERIT)

set role scientists;
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR:  must be owner of relation test_table

我错过了什么?是否有可能 test_tablealice 拥有,而 ALTERbjork 编辑?

最佳答案

您需要在创建表之前SET ROLE,以便角色成为表所有者。

只允许表所有者ALTER 表。

关于postgresql - 由同一组的用户拥有的 ALTER postgres 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46976019/

相关文章:

postgresql - 如何尽快使用查询将批量数据从表加载到表? (postgresql)

PostgreSQL 计算当前行值占总和的百分比

postgresql - 根据 JSONB 中的键值获取行内的最大值?

java - windows下的postgresql类路径

postgresql - 连接表上的索引

空间+时间参数的Postgresql复合索引

sql - postgresql 从与数据相同的列中用 NULL 更新列

sql - 如何从 SQL 中的两个表创建矩阵?

sql - 在任何 PostgreSQL 语句(甚至不返回结果的语句)上调用 row_to_json(row)

sql - PostgreSQL : Use of ANY for multiple values