postgres full postgresql psql

postgresql - postgres full text search



Psql enumera todas las tablas (6)

Conéctese a la base de datos, luego liste las tablas:

/c liferay /dt

Así es como lo hago de todos modos.

Puede combinar esos dos comandos en una sola línea, si lo prefiere:

/c liferay /dt

Me gustaría enumerar todas las tablas en la base de datos liferay en mi instalación de PostgreSQL. ¿Cómo puedo hacer eso?

Me gustaría ejecutar SELECT * FROM applications; en la base de datos liferay . applications es una tabla en mi liferay db. ¿Cómo se hace esto?

Aquí hay una lista de todas mis bases de datos:

postgres=# /list List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- liferay | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | liferay=CTc/postgres lportal | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | postgres | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | template0 | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows) postgres=#


En SQL Query, puede escribir este código:

select table_name from information_schema.tables where table_schema=''YOUR_TABLE_SCHEME'';

Reemplace su esquema de tabla con YOUR_TABLE_SCHEME;

Ejemplo:

select table_name from information_schema.tables where table_schema=''eLearningProject'';

Para ver todos los esquemas y todas las tablas, no hay necesidad de cláusula where:

select table_name from information_schema.tables


Esto se puede usar en scripts de automatización si no necesita todas las tablas en todos los esquemas:

for table in $(psql -qAntc ''/dt'' | cut -d/| -f2); do ... done


Para ver las tablas públicas que puedes hacer

tablas de lista

/dt

list table, view, and access privileges

/dp or /z

o solo los nombres de la tabla

select table_name from information_schema.tables where table_schema = ''public'';


Puedes escribir /? para obtener información sobre todos los comandos soportados en psql.


Si desea enumerar todas las tablas, debe usar:

/dt *.*

para indicar que quiere todas las tablas en todos los esquemas . Esto incluirá tablas en pg_catalog , las tablas del sistema y aquellas en information_schema . No hay una forma incorporada de decir "todas las tablas en todos los esquemas definidos por el usuario"; Sin embargo, puede establecer su search_path de search_path en una lista de todos los esquemas de interés antes de ejecutar /dt .

Puede hacer esto programáticamente, en cuyo caso los psql backslash psql no harán el trabajo. Aquí es donde INFORMATION_SCHEMA viene al rescate. Para listar tablas:

SELECT table_name FROM information_schema.tables WHERE table_schema = ''public'';

Por cierto, si alguna vez quiere ver lo que está haciendo psql en respuesta a un comando de barra invertida, ejecute psql con el indicador -E . p.ej:

$ psql -E regress regress=# /list ********* QUERY ********** SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", pg_catalog.array_to_string(d.datacl, E''/n'') AS "Access privileges" FROM pg_catalog.pg_database d ORDER BY 1; **************************

para que pueda ver que psql está buscando pg_catalog.pg_database cuando obtiene una lista de bases de datos. Del mismo modo, para tablas dentro de una base de datos dada:

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'' 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'','''') 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;

Es preferible utilizar el estándar de SQL, el INFORMATION_SCHEMA portátil en lugar de los catálogos del sistema Pg cuando sea posible, pero a veces necesita información específica de Pg. En esos casos, está bien consultar los catálogos del sistema directamente, y psql -E puede ser una guía útil para psql -E cómo hacerlo.