2011-09-07 26 views
1
CREATE衆所周知聲明

如果我創建Postgres的順序如下:補助產生從pgAdmin的

CREATE SEQUENCE test 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 1 
    CACHE 1; 
GRANT ALL ON SEQUENCE test TO testuser; 
GRANT SELECT ON SEQUENCE test TO testuser2; 

,然後選擇pgAdmin的序列,點擊鼠標右鍵 - >創建腳本,我得到:

CREATE SEQUENCE test 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 1 
    CACHE 1; 
ALTER TABLE test 
    OWNER TO testuser; 
GRANT ALL ON TABLE test TO testuser; 
GRANT SELECT ON TABLE test TO testuser2; 

所以在GRANT語句我看到關鍵字「TABLE」,而不是「序列」

  1. 這是爲什麼?
  2. pgAdmin如何生成DDL提取?

這個問題是關係到我這裏其他的問題之一:
Query GRANTS granted to a sequence in postgres

回答

1

在PostgreSQL,序列是一種像表。

該目錄pg_class目錄表和大多數其他所有其他具有 列或其他類似的表。這包括索引(但 另請參見pg_index),序列,視圖,複合類型和TOAST 表;看到relkind。

PostgreSQL docs for pg_class,系統目錄中的一個(系統表)

+0

但如何pgAdmin的創建,如 「GRANT ALL ON TABLE測試,以testuser的」 staements?好的,ACL信息在pg_class的「relacl」列中可用,但需要一些編程工作來將諸如「{postgres = arwdDxt/postgres}」之類的內容轉換爲「GRANT SELECT ...」,幾乎不可能用純SQL。是不是有一個類似information_schema.role_table_grants的表格的地方? – markus

+0

@markus:對不起,延遲;我忽略了你的評論。我不知道pgAdmin如何爲其SQL窗格生成SQL,但是您可以[下載源代碼](http://www.pgadmin.org/download/source.php)。據我所知,沒有information_schema視圖公開序列的權限。 –