Daftar semua tabel di postgresql information_schema


200

Apa cara terbaik untuk mendaftar semua tabel di dalam information_schema PostgreSQL?

Untuk memperjelas: Saya bekerja dengan DB kosong (saya belum menambahkan tabel saya sendiri), tetapi saya ingin melihat setiap tabel dalam struktur information_schema.

Jawaban:


276

Anda harus bisa lari saja select * from information_schema.tables untuk mendapatkan daftar setiap tabel yang dikelola oleh Postgres untuk database tertentu.

Anda juga dapat menambahkan where table_schema = 'information_schema'untuk melihat hanya tabel dalam skema informasi.


4
Terima kasih, saya baru saja mencoba: / dt (asterisk). (Asterisk) apakah ada bedanya?
littleK

Saya tidak tahu apa-apa tentang / dt (asterisk). (Asterisk), maaf. Saya hanya menjalankan kueri pemilihan di postgres dan daftar informasi tentang semua tabel di dalamnya. Coba jalankan pernyataan pilih (pada db kosong Anda) dan lihat apa yang dikembalikan.
RodeoClown

Mencoba perintah di atas mencantumkan tabel berikut dalam information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Jadi apa perbedaan antara tabel tersebut dengan tabel yang ada di information_schema.tables?
littleK

2
Semua tabel yang telah Anda daftarkan (melalui perintah / dt) memberikan meta-informasi tentang database. Setiap tabel yang tercantum menunjukkan informasi yang berbeda. Jadi, misalnya, tabel information_schema.tables mencantumkan semua tabel dalam database dan atributnya (seperti dapat melihat apakah itu tabel atau tampilan, apa namanya dan informasi lain seperti itu). Tabel information_schema.sql_features akan menunjukkan fitur apa yang diaktifkan pada database (sehingga saya dapat melihat bahwa saya telah mendukung Embedded C pada database saya, serta SQL langsung).
RodeoClown

1
Anda dapat menjalankan pilih * pada setiap tabel yang terdaftar oleh perintah dt - itu baru saja menunjukkan kepada Anda daftar tabel yang berisi meta-data pada database.
RodeoClown

112

Untuk daftar tabel Anda gunakan:

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

Ini hanya akan mencantumkan tabel yang Anda buat.


Bagaimana dengan tabel yang tidak Anda buat tetapi Anda memiliki izin akses?
beli

4
Ini hanya akan menampilkan tabel dalam skema publik. Anda bisa membuat tabel di skema lain.
Joe Van Dyk

Juga ini tidak akan membedakan antara tabel dan tampilan.
jayarjo

44
\dt information_schema.

dari dalam psql, harus baik-baik saja.


14

The "\ z" COMMAND juga merupakan cara yang baik untuk daftar tabel ketika dalam sesi psql interaktif.

misalnya.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
Ini tidak mencantumkan tabel dalam skema selain publik .
Kenny Evitt

10

Anda dapat menggunakan juga

select * from pg_tables where schemaname = 'information_schema'

Dalam tabel pg * umum, Anda dapat melihat semuanya di db, tidak dibatasi oleh izin Anda (jika Anda memiliki akses ke tabel tentu saja).


9

Untuk skema pribadi 'xxx'di postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Tanpa table_type = 'BASE TABLE', Anda akan membuat daftar tabel dan tampilan


8

1. dapatkan semua tabel dan tampilan dari information_schema.tables, termasuk tabel information_schema dan pg_catalog.

select * from information_schema.tables

2. dapatkan tabel dan tampilan milik skema tertentu

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3. dapatkan tabel saja (hampir \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

Jika Anda tidak memfilter menurut table_type, Anda akan mendapatkan semua jenis objek, seperti tabel dan tampilan yang tercampur.
russellhoff

Untuk apa sebenarnya where table_schema not in ('information_schema', 'pg_catalog')?
jayarjo

1

Jika Anda ingin kueri satu-baris yang cepat dan kotor:

select * from information_schema.tables

Anda bisa menjalankannya langsung di alat Kueri tanpa harus membuka psql.

(Posting lain menyarankan pertanyaan information_schema yang lebih spesifik dan bagus, tetapi sebagai yang baru, saya menemukan permintaan satu-baris ini membantu saya memahami tabel)

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.