2017-07-24 119 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