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.