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.

littleK
sumber

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.

RodeoClown
sumber
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.

phsaires
sumber
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.


sumber
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)
Chris Shoesmith
sumber
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).

Timofey
sumber
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

germanlinux
sumber
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'
hzh
sumber
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)

Sally Levesque
sumber