Hoe geef ik een lijst van alle databases en tabellen met psql?

Ik probeer PostgreSQL-administratie te leren en ben begonnen te leren hoe ik het psql opdrachtregelprogramma moet gebruiken.

Wanneer ik me aanmeld met psql --username=postgres, hoe geef ik dan een lijst van alle databases en tabellen?

Ik heb , d en dS+ maar er wordt niets vermeld. Ik heb twee databases en een paar tabellen gemaakt met pgAdmin III, dus ik weet dat ze moeten worden vermeld.

Opmerkingen

  • Als je er toegang toe wilt hebben via de opdrachtregel, voer psql -l
  • Deze opmerking zou zeker een van de beste antwoorden moeten zijn! Als je verificatie nodig hebt, kun je ook psql --username=postgres -l.

Answer

Let op de volgende commandos:

  • \list of \l: lijst alle databases
  • \dt: maak een lijst van alle tabellen in de huidige database met uw search_path
  • \dt *.: maak een lijst van alle tabellen in de huidige database, ongeacht uw search_path

U zult nooit tabellen in andere databases zien, deze tabellen zijn niet zichtbaar. U moet verbinding maken met de juiste database om de tabellen (en andere objecten) te zien.

Om tussen databases te wisselen:

\connect database_name of \c database_name

Zie de handleiding over psql .

Reacties

  • Je kunt \c db_name gebruiken om verbinding te maken met een bepaalde database.
  • \dt niet ‘ lijkt niet alle tabellen in de huidige database te tonen (het lijkt de tabellen uit te sluiten die niet ‘ t gevonden zijn in de search_path tenminste op 9.2)
  • \dt *. zal alle tabellen in alle schemas weergeven, zonder dat je je zoekpad hoeft te wijzigen.
  • \ l + is mijn favoriet – het toont ook het schijfgebruik.
  • Op Windows kan ik de databases weergeven met dit commando psql -U username -l maar het werkt niet met de slash-versie.

Answer

Hier worden databases weergegeven:

SELECT datname FROM pg_database WHERE datistemplate = false; 

Dit geeft een lijst van tabellen in de huidige database

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

Reacties

  • Jij ‘ klopt, maar de vraag ging over de meta-commandos van de psql-tool. \ dt is veel gemakkelijker dan het typen van een vraag.
  • Ik denk dat dit een GEWELDIG antwoord is, omdat het kan worden uitgevoerd vanaf een Linux-opdrachtregel in plaats van in de psql-interpreter te moeten staan die soms voor mij vastloopt met ExtraPutty.
  • Heeft ook mijn dag gered. Voor mijn specifieke geval heb ik ‘ m WHERE table_schema = 'public' toegevoegd omdat ik alleen aangepaste tabellen wil verwijderen.
  • Als je begint psql met de -E vlag, zal het de echte vraag weergeven als je een meta-commando gebruikt.
  • Ja, ik denk dat het ‘ een goed antwoord is stelt u in staat om op een meer gecontroleerde manier deel te nemen aan en querys uit te voeren op de databases, vooral wanneer u een script wilt genereren uit een grote databaselijst. Bedankt.

Antwoord

In Postgresql vermelden deze terminalopdrachten de beschikbare databases

el@defiant$ /bin/psql -h localhost --username=pgadmin --list 

Of het commando is eenvoudiger gezegd:

psql -U pgadmin -l 

Die commandos drukken dit af op de 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) 

Dit zijn de beschikbare databases.

In PSQL geven deze commandos een lijst van de beschikbare tabellen

Je moet een database specificeren voordat je kan de tabellen in die database weergeven.

el@defiant$ psql -U pgadmin -d kurz_prod 

Dit brengt je naar een psql-terminal:

kurz_prod=# 

Gebruik het commando \d wat betekent dat alle tabellen, views en sequenties worden getoond

kurz_prod=# \d 

Dit print:

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

Om de psql-terminal te verlaten, typ \q en druk op enter. Of Ctrl-D doet hetzelfde. Dit zijn de tabellen in die database.

Opmerkingen

  • \ d geeft niet alleen tabellen weer: \d[S+] list tables, views, and sequences
  • Voor mij is dit het ” juiste ” antwoord omdat het niet ‘ Je hoeft niet al verbonden te zijn met een bestaande database.
  • Eén liner voor gebruik in scripts (als root): su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'

Antwoord

\l is ook een afkorting voor \list. Er zijn nogal wat slash-commandos die je in psql kunt opsommen door \? te gebruiken.

Answer

Om meer informatie te krijgen over database en tabellijst, kunt u het volgende doen:

\l+ om databases weer te geven

 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) 

en

\d+ om alle tabellen in het huidige zoekpadschema in de huidige database weer te geven.

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) 

Answer

Vanuit pg_Admin kunt u eenvoudig het volgende uitvoeren op uw huidige database en het zal alle tabellen voor het gespecificeerde schema ophalen:

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

Hiermee krijgt u een lijst met alle permanente tabellen (meestal de tabellen waarnaar u op zoek bent). U kunt alleen de tabelnamen krijgen als u het * jokerteken wijzigt in alleen het table_name. Het openbare table_schema is het standaardschema voor de meeste databases, tenzij uw beheerder een nieuw schema heeft ingesteld.

Opmerkingen

  • Hoewel dit waar is, richt dit zich tot een andere klant dan waar het OP naar vroeg.
  • Dit werkte prima voor mij, en hoewel mijn use case niet precies was waar het OP om vroeg, hielp het me de tafellijst te krijgen terwijl ik verbonden was via wrapper (in Julialang LibPQ.jl )

Antwoord

Het is mogelijk dat u de tabellen in een schema dat niet in uw zoekpad staat, of de standaard, dat wil zeggen public, en dus zullen de tabellen niet verschijnen met \ dt. Als je een schema gebruikt dat bijvoorbeeld data heet, kun je dit oplossen door uit te voeren,

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

Sluit af en voer psql opnieuw in en nu \ dt laat je ook de tabellen in schemagegevens zien.

Opmerkingen

  • Nou, een simpele set search_path=data, public; zou ook lukken 🙂
  • @dezso, maakt dat de verandering permanent, of alleen in die psql-sessie?
  • Err, ik was niet erg duidelijk. Het was bedoeld in plaats van de logout-login-cyclus.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *