Jak mohu zobrazit seznam všech databází a tabulek pomocí psql?

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

  • Pokud k nim chcete získat přístup prostřednictvím příkazového řádku spusťte psql -l
  • Tento komentář by měl být určitě jednou z nejlepších odpovědí! Pokud potřebujete ověření, můžete také psql --username=postgres -l.

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 na search_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 v search_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í.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *