Snažím se naučit administraci PostgreSQL a začal jsem se učit používat psql
nástroj příkazového řádku.
Jak se přihlásím pomocí psql --username=postgres
, jak vypíšu seznam všech databází a tabulek?
Zkoušel jsem \d
, d
a dS+
, ale nic tam není uvedeno. Vytvořil jsem dvě databáze a několik tabulek s pgAdmin III, takže vím, že by měly být uvedeny.
Komentáře
Odpovědět
Vezměte prosím na vědomí následující příkazy:
-
\list
nebo\l
: seznam všech databází -
\dt
: seznam všech tabulek v aktuální databázi pomocísearch_path
-
\dt *.
: vypíše všechny tabulky v aktuální databázi bez ohledu nasearch_path
Tabulky v jiných databázích nikdy neuvidíte, tyto tabulky nejsou viditelné. Chcete-li zobrazit její tabulky (a další objekty), musíte se připojit ke správné databázi.
Přepnutí databází:
\connect database_name
nebo \c database_name
Přečtěte si příručku o psql .
Komentáře
- Pro připojení k určité databázi můžete použít
\c db_name
. -
\dt
‚ nezobrazí seznam všech tabulek v aktuální databázi (zdá se, že vylučuje ty, které ‚ nenalezeny vsearch_path
alespoň na 9.2) -
\dt *.
vypíše všechny tabulky ve všech schématech, aniž by bylo nutné upravovat cestu hledání. - \ l + je můj oblíbený – zobrazuje také využití disku.
- Ve Windows mohu pomocí tohoto příkazu zobrazit seznam databází
psql -U username -l
, ale nefunguje to s lomítkem.
Odpověď
Seznam databází:
SELECT datname FROM pg_database WHERE datistemplate = false;
Toto uvádí seznam tabulek v aktuální databázi
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Komentáře
- Vy ‚ máte pravdu, ale otázka byla o meta-příkazech nástroje psql. \ dt je mnohem jednodušší než psaní jakéhokoli dotazu.
- Myslím, že se jedná o SKVĚLOU odpověď, protože ji lze spustit z příkazového řádku systému Linux, na rozdíl od nutnosti být v tlumočníku psql, který mi někdy visí pomocí ExtraPutty.
- Také mi zachránil den. V mém konkrétním případě ‚ přidávám
WHERE table_schema = 'public'
, protože chci zrušit pouze vlastní tabulky. - Pokud začnete psql s příznakem -E, zobrazí skutečný dotaz, když použijete meta-příkaz.
- Ano, myslím, že ‚ je dobrá odpověď, protože umožňuje vám spojovat se a dotazovat se na databáze kontrolovanějším způsobem, zvláště když chcete vygenerovat nějaký skript z velkého seznamu databází. Díky.
Odpověď
Tyto příkazy terminálu v Postgresql uvádějí seznam dostupných databází
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
Nebo příkaz uvedl jednodušeji:
psql -U pgadmin -l
Tyto příkazy to vytisknou na terminálu:
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)
Toto jsou dostupné databáze.
V PSQL tyto příkazy vypisují dostupné tabulky
Musíte zadat databázi může zobrazit seznam tabulek v této databázi.
el@defiant$ psql -U pgadmin -d kurz_prod
Tím se dostanete k terminálu psql:
kurz_prod=#
Použijte příkaz \d
, což znamená zobrazit všechny tabulky, pohledy a sekvence
kurz_prod=# \d
Vytiskne se:
List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows)
Potom ukončete terminál psql zadáním \q
a stisknutím klávesy enter. Nebo Ctrl-D
udělá totéž. Toto jsou tabulky v dané databázi.
Komentáře
- \ d neuvádí pouze tabulky:
\d[S+] list tables, views, and sequences
- Pro mě je to “ správná “ odpověď, protože ‚ Nevyžadují, abyste již byli připojeni k existující databázi.
- Jedna podšívka pro použití ve skriptech (jako root):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Odpověď
\l
je také zkratka pro \list
. Existuje poměrně málo lomítkových příkazů, které můžete zobrazit v psql pomocí \?
.
Odpověď
Chcete-li získat více informací o seznamu databází a tabulek, můžete:
\l+
seznam databází
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)
a
\d+
seznam všech tabulek v aktuálním schématu cesty_hledání v aktuální databázi.
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)
odpověď
Z pg_Admin můžete ve své aktuální databázi jednoduše spustit následující a získáte všechny tabulky pro zadané schéma:
SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name
Tím se dostanete seznam všech trvalých tabulek (obvykle tabulek, které hledáte). Pokud změníte zástupný znak *
pouze na . Veřejné table_schema
je výchozí schéma pro většinu databází, pokud váš správce nenastavil nové schéma.
Komentáře
- I když je to pravda, jedná se o adresu jiného klienta než se OP zeptal.
- To pro mě fungovalo skvěle, a ačkoli můj případ použití nebyl přesně to, o co OP žádal, pomohlo mi to získat seznam tabulek při připojení přes wrapper (v Julialang LibPQ.jl )
Odpověď
Je možné, že jste tabulky vložili do schéma, které není ve vaší vyhledávací cestě, nebo výchozí, tj. veřejné, a tak se tabulky nezobrazí pomocí \ dt. Pokud používáte schéma s názvem řekněme data, můžete to opravit spuštěním,
alter database <databasename> set search_path=data, public;
Ukončete a znovu zadejte psql a nyní \ dt vám také ukáže tabulky v datech schématu.
Komentáře
- No, jednoduchý
set search_path=data, public;
udělal by to taky 🙂 - @dezso, dělá to změnu trvale, nebo jen v té relaci psql?
- Chybně, nebyl jsem moc jasný. Bylo to zamýšleno místo cyklu odhlášení a přihlášení.
psql -l
psql --username=postgres -l
.