Hur listar jag alla databaser och tabeller med psql?

Jag försöker lära mig PostgreSQL-administrationen och har börjat lära mig hur man använder kommandoradsverktyget psql.

När jag loggar in med psql --username=postgres, hur listar jag alla databaser och tabeller?

Jag har försökt \d, d och dS+ men ingenting anges. Jag har skapat två databaser och några tabeller med pgAdmin III, så jag vet att de bör listas.

Kommentarer

  • Om du vill komma åt den via kommandoraden, kör psql -l
  • Denna kommentar borde definitivt vara ett av de bästa svaren! Om du behöver autentisering kan du också psql --username=postgres -l.

Svara

Observera följande kommandon:

  • \list eller \l: lista alla databaser
  • \dt: lista alla tabeller i den aktuella databasen med din search_path
  • \dt *.: lista alla tabeller i den aktuella databasen oavsett din search_path

Du kommer aldrig att se tabeller i andra databaser, dessa tabeller är inte synlig. Du måste ansluta till rätt databas för att se dess tabeller (och andra objekt).

För att byta databas:

\connect database_name eller \c database_name

Se handboken om psql .

Kommentarer

  • Du kan använda \c db_name för att ansluta till en viss databas.
  • \dt inte ’ t verkar lista alla tabeller i den aktuella databasen (det verkar utesluta de som inte finns ’ t finns i search_path åtminstone 9.2)
  • \dt *. listar alla tabeller i alla scheman utan att behöva ändra din sökväg.
  • \ l + är min favorit – den visar också diskanvändningen.
  • I Windows kan jag lista databaserna med det här kommandot psql -U username -l men det fungerar inte med snedstreckversionen.

Svar

Detta listar databaser:

SELECT datname FROM pg_database WHERE datistemplate = false; 

Detta listar tabeller i den aktuella databasen

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

Kommentarer

  • Du ’ är rätt, men frågan handlade om metakommandon för psql-verktyget. \ dt är mycket enklare än att skriva någon fråga.
  • Jag tycker att det här är ett STOR svar eftersom det kan köras från en Linux-kommandorad i motsats till att behöva vara i psql-tolk som ibland hänger för mig med ExtraPutty.
  • Räddade också min dag. För mitt speciella fall lägger jag till ’ och lägger till WHERE table_schema = 'public' eftersom jag bara vill släppa anpassade tabeller.
  • Om du börjar psql med flaggan -E, den kommer att visa den riktiga frågan när du använder ett metakommandot.
  • Ja, jag tycker att det ’ är ett bra svar eftersom det låter dig gå med och fråga databaserna på ett mer kontrollerat sätt, särskilt när du vill skapa något skript ur en stor databaslista. Tack.

Svar

I Postgresql listar dessa terminalkommandon tillgängliga databaser

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

Eller kommandot sa enklare:

psql -U pgadmin -l 

Dessa kommandon skriver ut detta på terminalen:

 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) 

Detta är de tillgängliga databaserna.

I PSQL listar dessa kommandon de tillgängliga tabellerna

Du måste ange en databas innan du kan lista tabellerna i den databasen.

el@defiant$ psql -U pgadmin -d kurz_prod 

Detta tar dig till en psql-terminal:

kurz_prod=# 

Använd kommandot \d vilket betyder att alla tabeller, vyer och sekvenser visas

kurz_prod=# \d 

Detta skrivs ut:

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

För att avsluta psql-terminalen, skriv \q och tryck på enter. Eller Ctrl-D gör samma sak. Det här är tabellerna i den databasen.

Kommentarer

  • \ d listar inte bara tabeller: \d[S+] list tables, views, and sequences
  • För mig är detta ” rätt ” svaret eftersom det inte ’ kräver inte att du redan är ansluten till en befintlig databas.
  • En liner för användning i skript (som root): su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'

Svar

\l är också förkortning för \list. Det finns en hel del snedstreckskommandon som du kan lista i psql med \?.

Svar

För att få mer information om databas och tabellista kan du göra:

\l+ för att lista databaser

 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) 

och

\d+ för att lista alla tabeller i aktuellt sökvägsschema i aktuell databas.

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) 

Svar

Från pg_Admin kan du helt enkelt köra följande på din nuvarande databas så får du alla tabeller för det angivna schemat:

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

Detta ger dig en lista med alla permanenta tabeller (vanligtvis tabellerna du letar efter). Du kan bara få tabellnamnen om du ändrar jokertecknet * till bara table_name. Allmänheten table_schema är standardschemat för de flesta databaser såvida inte din administratör har skapat ett nytt schema.

Kommentarer

  • Även om detta är sant, riktar det sig till en annan klient än OP frågade om.
  • Detta fungerade bra för mig, och även om mitt användningsfall inte var precis vad OP begärde, hjälpte det mig att få tabellistan när jag var ansluten via omslag (i Julialang LibPQ.jl )

Svar

Det är möjligt att du har lagt in tabellerna i en schema som inte finns i din sökväg, eller standard, dvs. offentligt och så visas inte tabellerna med \ dt. Om du använder ett schema som heter, säg data, kan du åtgärda detta genom att köra,

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

Avsluta och ange psql igen och nu \ dt visar också tabellerna i schemadata.

Kommentarer

  • Tja, en enkel set search_path=data, public; skulle göra tricket också 🙂
  • @dezso, gör det ändringen permanent, eller bara i den psql-sessionen?
  • Fel, jag var inte så tydlig. Det var avsett istället för inloggnings-inloggningscykeln.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *