Oracle

PostgreSQL中有沒有辦法為會話中的所有未來創建表語句設置預設所有者

  • July 16, 2021

我們有一個將 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 解決方案不同。

引用自:https://dba.stackexchange.com/questions/137206