2017-07-24 120 views
0

postgresql db。兩個模式1. base_layers 2. how每個人都有自己獨特的登錄名(不是超級用戶)postgresql從另一個表中的另一個表創建表

我很簡單地試圖從表中從base_layers連接SQL窗口

我跑瞭如何架構建立在base_layers架構中的一個表這

GRANT ALL ON SCHEMA base_layers TO how; 

create table base_layers.man as 
select * from how.hl_boundary 

,這讓我這個錯誤

ERROR: permission denied for relation hl_boundary 

********** Error ********** 

ERROR: permission denied for relation hl_boundary 
SQL state: 42501 

但是當我通過Postgres的運行相同的查詢SQL連接窗口它正確地創建此表中base_layers模式...

什麼,我需要爲base_layers連接SQL窗口做的是能夠從另一個架構中創建一個表

如何架構

-- Schema: how 

-- DROP SCHEMA how; 

CREATE SCHEMA how 
    AUTHORIZATION how; 

GRANT ALL ON SCHEMA how TO how; 
GRANT USAGE ON SCHEMA how TO public; 
GRANT ALL ON SCHEMA how TO base_layers; 

ALTER DEFAULT PRIVILEGES IN SCHEMA how 
    GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES 
    TO base_layers; 

base_layers模式

-- Schema: base_layers 

-- DROP SCHEMA base_layers; 

CREATE SCHEMA base_layers 
    AUTHORIZATION base_layers; 

GRANT ALL ON SCHEMA base_layers TO base_layers; 
GRANT USAGE ON SCHEMA base_layers TO public; 
GRANT ALL ON SCHEMA base_layers TO how; 

ALTER DEFAULT PRIVILEGES IN SCHEMA base_layers 
    GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES 
    TO public; 
+0

你在創建這些表之前還是之後運行了'ALTER DEFAULT'?該命令不會更改現有表的權限。此外,它只適用於由當前用戶創建的表(除非指定'FOR [role]') – Nicarus

+0

@Nicarus在創建表之後,我運行了alter default – ziggy

+0

然後,您需要運行單獨的'GRANT'命令現有表作爲「ALTER DEFAULT」不會影響現有表。 – Nicarus

回答

0

你需要對錶授予選擇權限給用戶,就像這樣:

GRANT SELECT ON TABLE hl_boundary TO [user]; 

替換[user]與您正在運行此命令的用戶。

+0

沒有即時通訊在base_layers上運行它 – ziggy

+0

查看更新。它仍然是相同的命令。 – Nicarus

+0

nope仍然是相同的錯誤。我想要在這兩個模式之間進行總訪問 – ziggy