Oracle
PostgreSQL中有沒有辦法為會話中的所有未來創建表語句設置預設所有者
我們有一個將 cobol 數據(索引文件)傳輸到數據庫的程序。
到目前為止,我們將數據傳輸到了 Oracle 數據庫。
在程序開始時,我使用使用者登錄,
sys
然後將目前模式更改為ink
. 我這樣做是因為ink
沒有創建表的權限。然後我創建了一個表,表的所有者是自動的
ink
,不是sys
。我們最近已將數據庫從 Oracle 切換到 Postgres。
在這裡,我以“postgres”身份登錄,然後切換到“ink”模式:
set search_path to 'ink';
然後我創建了一個表,表的所有者自動是
postgres
,不是ink
。所以這種行為是相反的。為了獲得與 oracle 數據庫相同的行為,我必須做什麼:
在我的場景中,表所有者應該自動成為
ink
,而不是postgres
。如果我不用寫就好了
ALTER TABLE ... OWNER TO ink;
在每個創建表命令之後。
在 Oracle 中,模式和使用者是一回事。在 Postgres 中不是這樣。
因此,您在 Oracle 在“Postgres 土地”中所做的事情並沒有直接的“映射”。表始終歸最初創建它的使用者所有,無法更改它。
如果您不想授予使用者
ink
創建表的權限,“Postgres”方式將是授予該使用者對錶的所有權限。與 Oracle 不同,您可以為模式中創建的對象建立預設權限。您無需記住在創建每個表後授予它們。create schema ink; grant usage on schema ink to ink; alter default privileges in schema ink grant all privileges on tables to ink;
之後創建的每個表都將自動具有定義的權限,即:
ink
可以對它們做任何事情,除了刪除它們,因為該使用者不是所有者。這與 Oracle 解決方案不同。