我正在使用 PostgreSQL 9.2.4。当我在非超级用户拥有的数据库中以非超级用户身份创建表时,它归postgres用户所有,因此除非我明确授予自己权限,否则我无法将任何数据放入其中。
我创建了这样的非超级用户:
admin_user=# create role "test1" NOINHERIT LOGIN ENCRYPTED PASSWORD 'wibble' CONNECTION LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个test1像这样拥有的数据库:
admin_user=# create database "test1$db1" with owner "test1";
Run Code Online (Sandbox Code Playgroud)
然后我以 user 身份启动了一个新的 psql test1,并创建了一个表:
test1$db1=> create table test_table (column_name varchar(50));
Run Code Online (Sandbox Code Playgroud)
但我无法插入其中:
test1$db1=> insert into test_table values ('some data');
ERROR: permission denied for relation test_table
Run Code Online (Sandbox Code Playgroud)
检查权限显示该表归postgres用户所有:
test1$db1=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+----------
public | test_table | table | postgres
Run Code Online (Sandbox Code Playgroud)
但是,我可以授予自己权限并执行以下操作:
test1$db1=> grant …Run Code Online (Sandbox Code Playgroud)