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.