2016-07-15 6 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 센트) – syuja

답변

1

제네릭 클라이언트에서 별칭을 사용할 수 있는지 여부는 확실하지 않습니다.

h1/ext/eng/ext_eng.sql 파일을 먼저 읽고 Python으로 결과 SQL 텍스트를 db.query()으로 스트리밍하면 피할 수 있습니다.

\ dt, \ du 및 \ dv는 psql 프롬프트에서 \set ECHO_HIDDEN을 실행 한 다음 각각을 실행하여 실제 정의를 확인함으로써 볼 수 있습니다. 아래에 결과를 포함했습니다. 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를 참조를 대체 할 수있다 .

관련 문제