Daftar tabel dalam skema PostgreSQL


329

Ketika saya melakukan \dtdalam psql saya hanya mendapatkan daftar tabel dalam skema saat ini ( publicsecara default).

Bagaimana saya bisa mendapatkan daftar semua tabel di semua skema atau skema tertentu?

Jawaban:


505

Dalam semua skema:

=> \dt *.*

Dalam skema tertentu:

=> \dt public.*

Dimungkinkan untuk menggunakan ekspresi reguler dengan beberapa batasan

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Pengguna mahir dapat menggunakan notasi ekspresi reguler seperti kelas karakter, misalnya [0-9] untuk mencocokkan digit mana pun. Semua karakter khusus ekspresi reguler berfungsi sebagaimana ditentukan dalam Bagian 9.7.3, kecuali .yang diambil sebagai pemisah seperti yang disebutkan di atas, *yang diterjemahkan ke notasi ekspresi reguler .*, ?yang diterjemahkan ke ., dan $yang dicocokkan secara harfiah. Anda dapat meniru karakter pola ini saat dibutuhkan dengan menulis ?untuk ., (R+|)untuk R*, atau (R|)untuk R?. $tidak diperlukan sebagai karakter ekspresi reguler karena polanya harus cocok dengan seluruh nama, tidak seperti interpretasi biasa dari ekspresi reguler (dengan kata lain,$secara otomatis ditambahkan ke pola Anda). Tuliskan *di awal dan / atau akhir jika Anda tidak ingin pola itu berlabuh. Perhatikan bahwa dalam tanda kutip ganda, semua karakter khusus ekspresi reguler kehilangan makna khusus mereka dan dicocokkan secara harfiah. Juga, ekspresi reguler karakter khusus dicocokkan secara harfiah dalam pola nama operator (yaitu, argumen dari \do).


6
Sederhananya, \dtiya \dt public.*kan?
Api Beku

Bagaimana kalau, katakanlah, dua tabel spesifik dalam skema tertentu? Suka \dt public.user_info, public.user_scope?
James M. Lay

Namun, lebih mudah hanya dengan melakukan \dt public.a; \dt public.b;satu baris.
James M. Lay

itu agak implisit .. Jika hanya memberikan tabel "publik", orang tidak akan mengharapkan apa-apa lagi melalui ekspresi reguler ..
mehmet

1
@FrozenFlame Tidak! Secara default itu menunjukkan apa pun yang ada di Anda search_path, dan yang default untuk "$user", public.*. Akibatnya, set search_path=s; \dtakan daftar semua tabel dalam skema s.
Lukas Juhrich

258

Anda dapat memilih tabel dari information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'

7
sangat membantu jika antarmuka Anda tidak mendukung pintasan. Terima kasih.
Matt Bannert

1
Ini juga bagus karena Anda bisa melakukan sesuatu seperti pilih table_schema, table_name dari information_schema.tables di mana table_name seperti '% whatever%'; jika Anda perlu tahu skema mana tabel tersebut berada. Tidak yakin Anda bisa melakukannya dengan \ dt
Josh Brown

2
Terima kasih, ini berfungsi di Amazon Redshift dan \ dt (jawaban yang diterima) tidak.
Carlos2W

2
Ini adalah jawaban yang paling bermanfaat secara umum. information_schema didefinisikan dalam SQL Standards, dan tersedia di sebagian besar database yang sesuai
Davos

54

Alternatifnya information_schemaadalah mungkin untuk menggunakan pg_tables:

select * from pg_tables where schemaname='public';

3
perhatikan bahwa jika Anda hanya ingin nama tabel adalah kueri yang dihasilkannyaSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Grant Humphries

Menemukan masalah izin dengan information_schematidak mencantumkan item dari publicskema, tetapi pg_tablesmetode ini berfungsi dengan baik. Terimakasih banyak!
John Crawford

8

Bagi mereka yang menemukan ini di masa depan:

Jika Anda ingin melihat daftar hubungan untuk beberapa skema:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.