Obtenga una consulta SQL equivalente para cualquier metacomando Postgres


11

Espero que el título sea autodescriptivo. Quiero poder traducir cualquier metacomando Postgres en su consulta SQL correspondiente / subyacente, al menos para aprender más sobre Postgres y la forma en que almacena la metainformación en sus tablas.

¿Alguna idea si esto es posible?

P.ej:

Cuando se conecta a la base de datos EJEMPLO, \dty SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;devuelve el mismo resultado.

Quiero encontrar, si es posible, una forma de obtener el valor SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;al ingresar \dta la función / macro / lo que sea.

Respuestas:


17

Fácil y muy útil: puede iniciar psql con el interruptor adecuado (-E) para obtener la información.

me@mystation:~/ > psql -E 
psql (9.3.11)
Type "help" for help.
me@mystation # \d
********* 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' 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','v','m','S','f','')
      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;

Eche un vistazo a http://www.postgresql.org/docs/current/static/app-psql.html para obtener más información. Una vez en psql, también puede establecer la variable ECHO_HIDDEN .


1
¡muy prometedor! pero cuando trato de obtener una definición de tabla con 'psql -E mytable', informa varias consultas, ninguna de las cuales devuelve nada útil cuando se emite individualmente, por lo que está sucediendo algo no informado.
philwalk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.