J'essaie d'apprendre l'administration de PostgreSQL et j'ai commencé à apprendre à utiliser l'outil de ligne de commande psql
.
Lorsque je me connecte avec psql --username=postgres
, comment répertorier toutes les bases de données et tables?
J'ai essayé \d
, d
et dS+
mais rien n'est répertorié. J'ai créé deux bases de données et quelques tables avec pgAdmin III, donc je sais qu'elles devraient être répertoriées.
Veuillez noter les commandes suivantes:
\list
ou \l
: liste toutes les bases de données\dt
: répertorie toutes les tables de la base de données actuelle à l'aide de votre search_path
\dt *.
: répertorie toutes les tables de la base de données actuelle quel que soit votre search_path
Vous ne verrez jamais de tables dans d'autres bases de données, ces tables ne sont pas visibles. Vous devez vous connecter à la base de données correcte pour voir ses tables (et autres objets).
Pour changer de base de données:
\connect database_name
ou \c database_name
Voir le manuel sur psql .
Cela répertorie les bases de données:
SELECT datname FROM pg_database
WHERE datistemplate = false;
Cela répertorie les tables de la base de données actuelle
SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
Ou la commande a déclaré plus simplement:
psql -U pgadmin -l
Ces commandes affichent ceci sur le terminal:
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)
Ce sont les bases de données disponibles.
Vous devez spécifier une base de données avant de pouvoir répertorier les tables de cette base de données.
el@defiant$ psql -U pgadmin -d kurz_prod
Cela vous amène à un terminal psql:
kurz_prod=#
Utilisez la commande \d
signifiant afficher toutes les tables, vues et séquences
kurz_prod=# \d
Cela imprime:
List of relations
Schema | Name | Type | Owner
--------+---------+----------+---------
public | mytable | table | pgadmin
public | testing | sequence | pgadmin
(2 rows)
Ensuite, pour quitter le terminal psql, tapez \q
et appuyez sur entrée. Ou Ctrl-D
fait la même chose. Ce sont les tables de cette base de données.
\l
est également un raccourci pour \list
. Il existe plusieurs commandes slash que vous pouvez répertorier dans psql en utilisant \?
.
Pour obtenir plus d'informations sur la base de données et la liste des tables, vous pouvez:
\l+
pour répertorier les bases de données
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)
et
\d+
pour répertorier toutes les tables du schéma search_path actuel dans la base de données actuelle.
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)
À partir de pg_Admin, vous pouvez simplement exécuter ce qui suit sur votre base de données actuelle et il obtiendra toutes les tables pour le schéma spécifié:
SELECT *
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema = 'public'
ORDER BY table_type, table_name
Cela vous donnera une liste de toutes les tables permanentes (généralement les tables que vous recherchez). Vous pouvez obtenir uniquement les noms de table si vous modifiez le *
caractère générique pour le table_name
. Le public table_schema
est le schéma par défaut pour la plupart des bases de données, sauf si votre administrateur a configuré un nouveau schéma.
Il est possible que vous ayez inséré les tables dans un schéma qui ne se trouve pas dans votre chemin de recherche, ou la valeur par défaut, c'est-à-dire publique, et que les tables n'apparaissent donc pas avec\dt. Si vous utilisez un schéma appelé, disons, données, vous pouvez résoudre ce problème en exécutant,
alter database <databasename> set search_path=data, public;
Quittez et entrez de nouveau psql et maintenant\dt vous montrera également les tables dans les données de schéma.