2016-07-15 119 views
1

我有一个GreenPlum数据库,并且我试图创建几个外部表。PyGreSQL交互式运行SQL

我正在使用PyGreSQL包与数据库进行接口。

但是,我不能逃避\i(或\dt,\du,\dv)。

db.query("\i h1/ext/eng/ext_eng" + i + ".sql")

pg.ProgrammingError: ERROR: syntax error at or near "\"

我试过"\\i"" '\i' "等组合。

+0

我想出了如何使用[this](http://superuser.com/questions/701415/how-do-i-execute-run-a-sql-file-in-postgresql-9-2 -6- centos的) – syuja

回答

1

我不确定那些别名可以被通用客户端使用。

您可以通过先用Python读取h1/ext/eng/ext_eng.sql文件,然后将产生的SQL文本以db.query()流式传输到PyGreSQL来避免\i

至于\ dt,\ du和\ dv - 可以通过在psql提示符下运行\set ECHO_HIDDEN来查看SQL等价物,然后发出每个以查看真正的定义。我已经包含了下面的结果。

\ DT:

SELECT n.nspname as "Schema", 
    c.relname as "Name", 
    CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type", 
    pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE c.relstorage WHEN 'h' THEN 'heap' WHEN 'x' THEN 'external' WHEN 'a' THEN 'append only' WHEN 'v' THEN 'none' WHEN 'c' THEN 'append only columnar' WHEN 'p' THEN 'parquet' WHEN 'f' THEN 'foreign' END as "Storage" 

FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE c.relkind IN ('r','') 
AND c.relstorage IN ('h', 'a', 'c', 'p','') 
     AND n.nspname <> 'pg_catalog' 
     AND n.nspname <> 'information_schema' 
     AND n.nspname !~ '^pg_toast' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
ORDER BY 1,2; 

\杜:

SELECT r.rolname, r.rolsuper, r.rolinherit, 
    r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, 
    r.rolconnlimit, 
    ARRAY(SELECT b.rolname 
     FROM pg_catalog.pg_auth_members m 
     JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) 
     WHERE m.member = r.oid) as memberof 
FROM pg_catalog.pg_roles r 
ORDER BY 1; 

\ DV:

SELECT n.nspname as "Schema", 
    c.relname as "Name", 
    CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type", 
    pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE c.relstorage WHEN 'h' THEN 'heap' WHEN 'x' THEN 'external' WHEN 'a' THEN 'append only' WHEN 'v' THEN 'none' WHEN 'c' THEN 'append only columnar' WHEN 'p' THEN 'parquet' WHEN 'f' THEN 'foreign' END as "Storage" 

FROM pg_catalog.pg_class c 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE c.relkind IN ('v','') 
AND c.relstorage IN ('v','') 
     AND n.nspname <> 'pg_catalog' 
     AND n.nspname <> 'information_schema' 
     AND n.nspname !~ '^pg_toast' 
    AND pg_catalog.pg_table_is_visible(c.oid) 
ORDER BY 1,2; 

这不是理想的,但你可以用这些代码等价物的\ d引用。