it-swarm.it

Come posso elencare tutti i database e le tabelle usando psql?

Sto cercando di imparare l'amministrazione PostgreSQL e ho iniziato a imparare come usare lo strumento da riga di comando psql.

Quando eseguo l'accesso con psql --username=postgres, come posso elencare tutti i database e le tabelle?

Ho provato \d, d e dS+ ma non è elencato nulla. Ho creato due database e alcune tabelle con pgAdmin III, quindi so che dovrebbero essere elencati.

1243
Jonas

Si prega di notare i seguenti comandi:

  • \list o \l: elenca tutti i database
  • \dt: elenca tutte le tabelle nel database corrente usando search_path
  • \dt *.: elenca tutte le tabelle nel database corrente indipendentemente dal tuo search_path

Non vedrai mai tabelle in altri database, queste tabelle non sono visibili. Devi connetterti al database corretto per vedere le sue tabelle (e altri oggetti).

Per cambiare database:

\connect database_name o \c database_name

Vedere il manuale su psql .

1639
Frank Heikens

Questo elenca i database:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Questo elenca le tabelle nel database corrente

SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
381
RolandoMySQLDBA

In Postgresql questi comandi di terminale elencano i database disponibili

[email protected]$ /bin/psql -h localhost --username=pgadmin --list

O il comando ha dichiarato più semplicemente:

psql -U pgadmin -l

Quei comandi stampano questo sul terminale:

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 kurz_prod | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 pgadmin   | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

Questi sono i database disponibili.

In PSQL questi comandi elencano le tabelle disponibili

Devi specificare un database prima di poter elencare le tabelle in quel database.

[email protected]$ psql -U pgadmin -d kurz_prod

Questo ti porta ad un terminale psql:

kurz_prod=#

Usa il comando \d significato mostra tutte le tabelle, le viste e le sequenze

kurz_prod=# \d

Questo stampa:

           List of relations
Schema |  Name   |   Type   |  Owner
--------+---------+----------+---------
public | mytable | table    | pgadmin
public | testing | sequence | pgadmin
(2 rows)

Quindi, per uscire dal terminale psql, digitare \q e premere invio. O Ctrl-D fa la stessa cosa. Queste sono le tabelle in quel database.

112
Eric Leschinski

\l è anche una scorciatoia per \list. Ci sono alcuni comandi slash, che puoi elencare in psql usando \?.

74
Derek Arnold

Per ottenere maggiori informazioni sul database e sull'elenco delle tabelle, puoi fare:

\l+ per elencare i database

                                                                    List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 pgbench    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 29 MB   | pg_default |
 postgres   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 6073 kB | pg_default | default administrative connection database
 slonmaster | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1401 MB | movespace  |
 slonslave  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 32 MB   | pg_default |
 template0  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5785 kB | pg_default | unmodifiable empty database
            |          |          |             |             | postgres=CTc/postgres |         |            |
 template1  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5985 kB | pg_default | default template for new databases
            |          |          |             |             | postgres=CTc/postgres |         |            |
 test       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 13 MB   | pg_default |
(7 rows)

e

\d+ per elencare tutte le tabelle nello schema del percorso di ricerca corrente nel database corrente.

test=# \dn+ --list schemas
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
schema1 | postgres | postgres=UC/postgres+| 
        |          | =UC/postgres         | 
(2 row)

test=# set search_path to schema1, public;
SET
test=# \d+
                                  List of relations
     Schema  |      Name       | Type  |    Owner     |    Size    | Description
    ---------+-----------------+-------+--------------+------------+-------------
     public  | all_units       | table | postgres     | 0 bytes    |
     public  | asset           | table | postgres     | 16 kB      |
     public  | asset_attribute | table | postgres     | 8192 bytes |
     public  | food            | table | postgres     | 48 kB      |
     public  | name_log        | table | postgres     | 8192 bytes |
     public  | outable         | table | ordinaryuser | 0 bytes    |
     public  | outable2        | table | ordinaryuser | 0 bytes    |
     public  | test            | table | postgres     | 16 kB      |
     public  | usr             | table | postgres     | 5008 kB    |
     schema1 | t1              | table | postgres     | 0 bytes    |
    (10 rows)
36
Soni Harriz

Da pg_Admin puoi semplicemente eseguire quanto segue sul tuo database corrente e otterrà tutte le tabelle per lo schema specificato:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
    AND table_schema = 'public' 
ORDER BY table_type, table_name

Questo ti porterà un elenco di tutte le tabelle permanenti (generalmente le tabelle che stai cercando). Puoi ottenere solo i nomi delle tabelle se modifichi * jolly solo per il table_name. Il pubblico table_schema è lo schema predefinito per la maggior parte dei database a meno che l'amministratore non abbia impostato un nuovo schema.

33
Larry W

È possibile che le tabelle siano state inserite in uno schema che non si trova nel percorso di ricerca o nel valore predefinito, ovvero pubblico, e quindi le tabelle non verranno visualizzate utilizzando\dt. Se usi uno schema chiamato, diciamo, dati, puoi risolverlo eseguendo,

alter database <databasename> set search_path=data, public;

Esci e rientra in psql e ora\dt ti mostrerà anche le tabelle nei dati dello schema.

19
John Powell