แสดงรายการตารางทั้งหมดใน postgresql information_schema


205

เป็นวิธีที่ดีที่สุดในการแสดงรายการตารางทั้งหมดภายใน Post_signema information_schema ของอะไร?

เพื่อชี้แจง: ฉันกำลังทำงานกับฐานข้อมูลเปล่า (ฉันไม่ได้เพิ่มตารางของตัวเอง) แต่ฉันต้องการเห็นทุกตารางในโครงสร้าง information_schema

คำตอบ:


281

คุณควรจะสามารถทำงานได้ select * from information_schema.tablesเพื่อรับรายการของทุกตารางที่จัดการโดย Postgres สำหรับฐานข้อมูลเฉพาะ

คุณยังสามารถเพิ่ม a where table_schema = 'information_schema'เพื่อดูเฉพาะตารางใน schema ของข้อมูล


4
ขอบคุณฉันเพิ่งลอง: / dt (เครื่องหมายดอกจัน) (เครื่องหมายดอกจัน) แตกต่างกันหรือไม่?
littleK

ฉันไม่รู้อะไรเกี่ยวกับ / dt (เครื่องหมายดอกจัน) สิ่ง (เครื่องหมายดอกจัน) ขอโทษ ฉันเพิ่งเลือกแบบสอบถามใน postgres และมันแสดงข้อมูลเกี่ยวกับตารางทั้งหมดในนั้น ลองเรียกใช้คำสั่ง select (บนฐานข้อมูลเปล่าของคุณ) และดูว่าจะส่งคืนอะไรบ้าง
RodeoClown

การลองคำสั่งข้างต้นจะแสดงตารางต่อไปนี้ใน information_schema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... แล้วความแตกต่างระหว่างตารางเหล่านั้นกับอะไรใน information_schema.tables?
littleK

2
ตารางทั้งหมดที่คุณระบุไว้ (ผ่านคำสั่ง / dt) ให้ข้อมูลเมตาเกี่ยวกับฐานข้อมูล ตารางแต่ละรายการที่แสดงข้อมูลที่แตกต่าง ตัวอย่างเช่นตาราง data_schema.tables จะแสดงรายการตารางทั้งหมดในฐานข้อมูลและคุณลักษณะ (เช่นสามารถดูได้ว่าเป็นตารางหรือมุมมองชื่อและข้อมูลอื่น ๆ เช่นอะไร) ตาราง data_schema.sql_features จะแสดงคุณสมบัติที่เปิดใช้งานในฐานข้อมูล (ดังนั้นฉันจะเห็นว่าฉันมี Embedded C ที่รองรับในฐานข้อมูลของฉันรวมถึง SQL โดยตรง)
RodeoClown

1
คุณสามารถเรียกใช้ select * ในแต่ละตารางที่แสดงโดยคำสั่ง dt - มันเพิ่งแสดงรายการของตารางที่ประกอบด้วย meta-data บนฐานข้อมูล
RodeoClown

114

สำหรับรายชื่อตารางของคุณใช้:

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

มันจะแสดงรายการตารางที่คุณสร้างเท่านั้น


วิธีการเกี่ยวกับตารางที่คุณไม่ได้สร้าง แต่คุณมีสิทธิ์การเข้าถึง
huy

4
สิ่งนี้จะแสดงตารางในสคีมาสาธารณะเท่านั้น คุณสามารถสร้างตารางในสคีมาอื่น ๆ
Joe Van Dyk

นอกจากนี้สิ่งนี้จะไม่แยกความแตกต่างระหว่างตารางและมุมมอง
jayarjo

44
\dt information_schema.

จากภายใน psql ควรจะใช้ได้


14

คำสั่ง"\ z"เป็นวิธีที่ดีในการแสดงตารางเมื่ออยู่ในเซสชัน psql แบบอินเทอร์แอคทีฟ

เช่น.

# 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
นี้ไม่ได้แสดงรายการในตาราง schema ที่อื่นที่ไม่ใช่ที่สาธารณะ
Kenny Evitt

10

คุณสามารถใช้

select * from pg_tables where schemaname = 'information_schema'

ใน Generall pg * tables ช่วยให้คุณเห็นทุกอย่างใน db ไม่ จำกัด สิทธิ์ของคุณ (หากคุณมีสิทธิ์เข้าถึงตารางแน่นอน)


9

สำหรับ schema ส่วนตัว'xxx'ใน postgresql:

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

หากไม่มีtable_type = 'BASE TABLE'คุณจะแสดงรายการตารางและมุมมอง


8

1. รับตารางและมุมมองทั้งหมดจาก information_schema.tables รวมถึง data_schema และ pg_catalog

select * from information_schema.tables

2.get ตารางและมุมมองเป็นสคีมาบางอย่าง

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

3. รับเฉพาะตาราง (เกือบ \ dt)

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

หากคุณไม่กรองตาม table_type คุณจะได้รับวัตถุทุกประเภทเช่นตารางและมุมมองที่ปะปนกันไป
russellhoff

ว่าอะไรwhere table_schema not in ('information_schema', 'pg_catalog')คือหา?
jayarjo

1

หากคุณต้องการคิวรี่ซับแบบรวดเร็วและสกปรก:

select * from information_schema.tables

คุณสามารถเรียกใช้ได้โดยตรงในเครื่องมือ Query โดยไม่ต้องเปิด psql

(โพสต์อื่น ๆ แนะนำการสอบถาม data_schema ที่เฉพาะเจาะจงมากขึ้น แต่ในฐานะที่เป็น newby ฉันกำลังค้นหาการค้นหาแบบหนึ่งซับช่วยให้ฉันสามารถจับตารางได้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.