Можно ли запускать команды обратной косой черты Postgres через RPostgresql?

В Postgres есть много удобных команд с обратной косой чертой (например, \dt, \du, \l и т. д.). Я хотел бы запустить их через интерфейс RPostgresql. Я пробовал следующее:

drv = dbDriver("PostgreSQL")
con <- dbConnect(drv, 
                 dbname = "my_database", 
                 host = "**********", 
                 port = ****, 
                 user = "******", 
                 password = "******")

dbExecute(con, "\\dt")

# Close PostgreSQL connection  
dbDisconnect(con) 

Однако я получаю следующую ошибку:

Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : ERROR:  syntax error at or 
near "\"
LINE 1: \dt
        ^
)

Можно ли запустить их из RPostgresql? Или команды обратной косой черты ограничены только командной строкой psql?


person ichbinallen    schedule 13.08.2018    source источник
comment
По крайней мере, проблема в том, как вы ввели команду. Как говорится в сообщении об ошибке, он не распознал \d. Это потому, что R пытается интерпретировать \d как имеющее особое значение. Вместо этого, чтобы передать строку \d, вам нужно заменить обратную косую черту другой обратной косой чертой. Пожалуйста, попробуйте \\dt   -  person G5W    schedule 13.08.2018
comment
Спасибо, что поймали этот G5W. Я обновил пост.   -  person ichbinallen    schedule 14.08.2018


Ответы (1)


Команды обратной косой черты интерпретируются инструментом psql CLI, ни базовые клиентские библиотеки не знают, что они собой представляют, ни сервер PostgreSQL. RPostgresql будет использовать клиентские библиотеки (или, возможно, прямо говорить о протоколе PostgreSQL для связи с сервером), поэтому команды обратной косой черты будут недоступны.

Тем не менее, команды обратной косой черты в основном являются удобными оболочками для запросов, которые обращаются к системным таблицам PostgreSQL. psql имеет переключатель -E, который позволит вам увидеть эти запросы :

-E
--echo-hidden
Повторить фактические запросы, сгенерированные \d и другими командами обратной косой черты. Вы можете использовать это для изучения внутренних операций psql. Это эквивалентно включению переменной ECHO_HIDDEN.

Таким образом, вы можете запустить psql -E ..., чтобы посмотреть, как, например, реализован \dt:

=> \dt
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'table' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','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;
**************************

                       List of relations
...

а затем запустите SQL, как и любой другой запрос в RPostgreSQL.

person mu is too short    schedule 13.08.2018
comment
Хотя это может быть правдой, я уверен, что это не имеет значения, поскольку проблема связана с тем, как R интерпретирует строки. Комментарий @G5W является ответом здесь. - person Dason; 13.08.2018
comment
@Dason Совсем не имеет значения, команды обратной косой черты известны только psql, поэтому исправление экранирования просто приведет к другой ошибке, но на этот раз из PostgreSQL. Вопрос в том, можно ли запустить их из RPostgresql? Или команды обратной косой черты ограничены только командной строкой psql? и ответ нет, но .... - person mu is too short; 13.08.2018
comment
@muistooshort, значит, программа командной строки psql интерпретирует команды обратной косой черты? Это то, что мне нужно было знать. - person ichbinallen; 14.08.2018
comment
Да, но вы можете узнать SQL, стоящий за этими командами, если вам нужна информация за пределами psql. - person mu is too short; 14.08.2018