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
Svara
Observera följande kommandon:
-
\list
eller\l
: lista alla databaser -
\dt
: lista alla tabeller i den aktuella databasen med dinsearch_path
-
\dt *.
: lista alla tabeller i den aktuella databasen oavsett dinsearch_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 isearch_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.
psql -l
psql --username=postgres -l
.