我有一个问题,目前还没有找到任何线索。我会尽力解释清楚,但如果需要更多细节,请随时询问!
背景
我正在使用Windows上的Postgres 9.2.4,并且需要为每个用户实现某种配额管理。
据我所知,没有这样的内置功能,大多数答案都指向使用文件系统的配额管理能力。
有一个单独的数据库,每个用户将拥有自己的模式。
我采取的方法包括通过具有不同表空间的不同位置来分离每个用户的数据文件,每个用户都是其表空间的所有者(因此我可以按照每个文件夹设置限额配置)。
这导致了我面临的问题...
问题
当创建表时,用户可以选择pg_default表空间存储数据。
让我更加困惑的是,如果稍后将表空间更改为由用户拥有的表空间,然后尝试将其切换回pg_default表空间,则会抛出权限被拒绝的错误。
为了澄清这里的顺序,以下是一些示例代码:
背景
我正在使用Windows上的Postgres 9.2.4,并且需要为每个用户实现某种配额管理。
据我所知,没有这样的内置功能,大多数答案都指向使用文件系统的配额管理能力。
有一个单独的数据库,每个用户将拥有自己的模式。
我采取的方法包括通过具有不同表空间的不同位置来分离每个用户的数据文件,每个用户都是其表空间的所有者(因此我可以按照每个文件夹设置限额配置)。
这导致了我面临的问题...
问题
当创建表时,用户可以选择pg_default表空间存储数据。
让我更加困惑的是,如果稍后将表空间更改为由用户拥有的表空间,然后尝试将其切换回pg_default表空间,则会抛出权限被拒绝的错误。
为了澄清这里的顺序,以下是一些示例代码:
-- Creates the table in the default tablespace
CREATE TABLE test_schema.test_table ( )
TABLESPACE pg_default;
-- Changes the tablespace to the one owned by the user
ALTER TABLE test_schema.test_table
SET TABLESPACE user_tablespace;
-- Tries to set back the pg_default tablespace (throws permission denied to pg_default tablespace)
ALTER TABLE test_schema.test_table
SET TABLESPACE pg_default;
所有这些命令都使用没有管理员特权的用户登录执行。pg_default表空间归postgres登录(管理员帐户)所有。
我猜这可能与数据库表空间有关,它被设置为使用pg_default表空间。
问题
是否可能限制用户仅在其拥有的表空间中创建对象?
pg_default
的问题是一个 bug。刚刚提出了修复方案 - 请参见 http://www.postgresql.org/message-id/20140116212852.GG2686@tamriel.snowman.net - Craig Ringer