2016-07-15 3 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

Я понял, как это сделать, используя [это] (http://superuser.com/questions/701415/how-do-i-ececute-run-a-sql-file-in-postgresql-9-2 -6-CentOS) – syuja

ответ

1

Я не уверен, что эти псевдонимы могут использоваться родовыми клиентами.

Вы можете избежать \i, предварительно прочитав файл h1/ext/eng/ext_eng.sql с помощью Python, а затем передайте полученный SQL-текст в PyGreSQL с помощью db.query().

Что касается \ dt, \ du и \ dv - эквиваленты SQL можно увидеть, запустив \set ECHO_HIDDEN из приглашения psql, а затем выдав каждому, чтобы увидеть истинное определение. Я включил результат ниже.

\ 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 с этими кодовыми эквивалентами ,

Смежные вопросы