PostgreSQL: แสดงตารางใน PostgreSQL


คำตอบ:


2660

จากpsqlอินเตอร์เฟสบรรทัดคำสั่ง

ก่อนอื่นให้เลือกฐานข้อมูลของคุณ

\c database_name

จากนั้นจะแสดงตารางทั้งหมดในสคีมาปัจจุบัน:

\dt

โดยทางโปรแกรม (หรือจากpsqlอินเทอร์เฟซด้วย):

SELECT * FROM pg_catalog.pg_tables;

ตารางระบบถ่ายทอดสดในpg_catalogฐานข้อมูล


102
@StephenCorwin ไม่\lเทียบเท่ากับshow databasesใน MySQL dtshow tablesและ lshow databases
454322

12
\dtมีประโยชน์มาก ที่pg_catalog.pg_tablesหนึ่งที่น้อยมากดังนั้นตามที่ปรากฏก้อนตารางภายในร่วมกันกับคนที่ผู้ใช้สร้างขึ้นสำหรับฐานข้อมูลของสิ่งที่คุณจะได้รับการเชื่อมต่อกับ
aroth

33
psql my_db_nameควรทำงานเพื่อ\dtให้ทำงานได้ เมื่อฉันวิ่งpsqlโดยไม่มีชื่อฐานข้อมูลฉันได้รับข้อความ "ไม่พบความสัมพันธ์"
Maksim Dmitriev

31
หากไม่มีตารางระบบ:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White

39
ก่อนอื่นคุณต้อง\c <DATABASE_NAME>เลือกฐานข้อมูลของคุณ
danio

200

เข้าสู่ระบบในฐานะ superuser:

sudo -u postgres psql

คุณสามารถแสดงรายการฐานข้อมูลและผู้ใช้ทั้งหมดตาม\lคำสั่ง (แสดงรายการคำสั่งอื่น ๆ ตาม\?)

ตอนนี้ถ้าคุณต้องการที่จะเห็นฐานข้อมูลอื่น ๆ ที่คุณสามารถเปลี่ยนผู้ใช้ / ฐานข้อมูลโดย\cคำสั่งที่ชอบ\c template1, \c postgres postgresและการใช้งาน\d, \dtหรือ\dSเพื่อดูตาราง / มุมมอง / ฯลฯ


1
นี่เป็นคำตอบที่ดีกว่าเนื่องจากหนึ่งอาจมีการติดตั้งฐานข้อมูลมากกว่าหนึ่งรายการ
เจอโรม

สิ่งนี้มีประโยชน์มาก ขอบคุณ.
สัญญาเพรสตัน

123

(เพื่อความสมบูรณ์)

คุณสามารถสืบค้นสคีมาข้อมูล (มาตรฐาน SQL) :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

3
+1 แม้ว่าความสมบูรณ์ mysql จะแสดงตารางเพียงแสดง schema ปัจจุบันมันเป็นการดีที่จะคิดแบบนี้ mysql มีฐานข้อมูลเดียว แต่มีหลาย schema ที่ postgresql สามารถมีฐานข้อมูล mutliple (แค็ตตาล็อก) และ schemas ดังนั้น equiv ควรเป็น table_schema = 'DB_NAME';
Rahly

ไม่ตรงกับ sql standard ไม่สามารถใช้ "||" การเชื่อมสตริงเข้าด้วยกันใน mssql
ChRoNoN

123

คุณสามารถใช้ Psql แบบเทอร์มินัลของ PostgreSQL เพื่อแสดงตารางใน PostgreSQL

1. เริ่ม Psql

โดยปกติคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อเข้าสู่ psql:

psql DBNAME USERNAME

ตัวอย่างเช่น, psql template1 postgres

สถานการณ์หนึ่งที่คุณอาจมีคือสมมติว่าคุณเข้าสู่ระบบในฐานะ root และคุณจำชื่อฐานข้อมูลไม่ได้ คุณสามารถป้อน Psql เป็นลำดับแรกโดยเรียกใช้:

sudo -u postgres psql

ในบางระบบคำสั่ง sudo ไม่พร้อมใช้งานคุณสามารถเรียกใช้คำสั่งด้านล่างแทน:

psql -U postgres
psql --username=postgres

2. แสดงตาราง

ตอนนี้ใน Psql คุณสามารถเรียกใช้คำสั่งเช่น:

  1. \? แสดงรายการคำสั่งทั้งหมด
  2. \l ฐานข้อมูลรายการ
  3. \conninfo แสดงข้อมูลเกี่ยวกับการเชื่อมต่อปัจจุบัน
  4. \c [DBNAME] เชื่อมต่อกับฐานข้อมูลใหม่เช่น \c template1
  5. \dt รายการตารางของสคีมาสาธารณะ
  6. \dt <schema-name>.* รายการตารางของสคีมาบางอย่างเช่น \dt public.*
  7. \dt *.* รายการตารางของสกีมาทั้งหมด
  8. จากนั้นคุณสามารถเรียกใช้คำสั่ง SQL เช่นSELECT * FROM my_table;(หมายเหตุ: คำสั่งจะต้องสิ้นสุดด้วยเครื่องหมายอัฒภาค;)
  9. \q ออกจาก psql

52
  1. เข้าสู่ระบบครั้งแรกในฐานะผู้ใช้ postgres:

    sudo su - postgres

  2. เชื่อมต่อกับฐานข้อมูลที่ต้องการ: psql -d databaseName

  3. \dt จะส่งคืนรายการตารางทั้งหมดในฐานข้อมูลที่คุณเชื่อมต่อ


40

การรัน psql ด้วยแฟล็ก -E จะสะท้อนเคียวรีที่ใช้ภายในเพื่อนำไปใช้ \ dt และสิ่งที่คล้ายกัน:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************

1
BTW, TOAST ใช้เพื่อจัดเก็บค่าจำนวนมาก: postgresql.org/docs/8.3/static/storage-toast.html
Dorian

39

เข้าสู่ระบบในฐานะ superuser เพื่อให้คุณสามารถตรวจสอบฐานข้อมูลและสคีมาทั้งหมด: -

sudo su - postgres

จากนั้นเราสามารถไปที่เชลล์ postgresql โดยใช้คำสั่งต่อไปนี้: -

psql

ตอนนี้คุณสามารถตรวจสอบรายการฐานข้อมูลทั้งหมดโดยใช้คำสั่งต่อไปนี้: -

\l

หากคุณต้องการตรวจสอบขนาดของฐานข้อมูลและใช้: -

\l+

กด qเพื่อย้อนกลับ

เมื่อคุณพบฐานข้อมูลแล้วคุณสามารถเชื่อมต่อกับฐานข้อมูลนั้นโดยใช้คำสั่งต่อไปนี้: -

\c database_name

เมื่อเชื่อมต่อแล้วคุณสามารถตรวจสอบตารางฐานข้อมูลหรือสคีมาได้โดย: -

\d

ตอนนี้กลับไปใช้เชลล์: -

q

ตอนนี้เพื่อดูรายละเอียดเพิ่มเติมของการใช้ตาราง: -

\d table_name

หากต้องการกลับไปที่ postgresql_shell กด \qที่จะกลับไปกด

exitและส่งกลับมาที่กดขั้ว


24

หากคุณต้องการเห็นรายการตารางที่คุณสร้างขึ้นคุณอาจพูดได้ว่า:

\dt

แต่เรายังมีPATTERNที่จะช่วยให้คุณปรับแต่งตารางที่จะแสดง หากต้องการแสดงทั้งหมดรวมทั้งpg_catalogSchema *คุณสามารถเพิ่ม

\dt *

ถ้าคุณทำ: \?

\ dt [S +] [รูปแบบ] ตารางรายการ


23

ใช้ดูตารางเท่านั้น

=> \dt

ถ้าต้องการดูตารางสคีมา

=>\dt+

หากคุณต้องการดูตารางสคีมาที่เฉพาะเจาะจง

=>\dt schema_name.* 

ผมค่อนข้างมั่นใจว่าคุณกำลังสับสนกับ+ Sหลัง (ตัวอักษร) แสดงตาราง schema +เพียงแสดงข้อมูลเพิ่มเติม
Garret Wilson

20

ก่อนเชื่อมต่อกับฐานข้อมูลโดยใช้คำสั่งดังต่อไปนี้

\c database_name

และคุณจะเห็นข้อความนี้ - You are now connected to database database_name- และพวกเขาเรียกใช้คำสั่งต่อไปนี้

SELECT * FROM table_name;

ใน database_name และ table_name เพียงอัปเดตด้วยฐานข้อมูลและชื่อตารางของคุณ


20
ฉันไม่แน่ใจว่านี่เป็นการตอบคำถาม ฉันคิดว่า OP คือ (เคย) พยายามที่จะรู้ว่าตารางทั้งหมดในฐานข้อมูลของเขาไม่ได้รับแถวทั้งหมดจากตารางเฉพาะในฐานข้อมูลของเขา ... ใช่ไหม?
snuggles

16

หากคุณใช้ pgAdmin4 ใน PostgreSQL คุณสามารถใช้สิ่งนี้เพื่อแสดงตารางในฐานข้อมูลของคุณ:

select * from information_schema.tables where table_schema='public';

14

โปรดทราบว่า\dtจะทำรายการตารางในสคีมาสาธารณะของฐานข้อมูลที่คุณใช้ ฉันชอบที่จะเก็บตารางไว้ในตารางที่แยกต่างหากดังนั้นคำตอบที่ได้รับการยอมรับจึงไม่ได้ผล

ในการแสดงตารางทั้งหมดภายในสคีมาที่เฉพาะเจาะจงฉันจำเป็นต้อง:

1) เชื่อมต่อกับฐานข้อมูลที่ต้องการ:

psql mydb

2) ระบุชื่อ schema ที่ฉันต้องการดูตารางหลัง\dtคำสั่งเช่นนี้

\dt myschema.*

นี่แสดงผลลัพธ์ที่ฉันสนใจ:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres


8

\ dt (ไม่จำเป็นต้องมี *) - จะแสดงตารางทั้งหมดสำหรับฐานข้อมูลที่มีอยู่ซึ่งคุณเชื่อมต่ออยู่แล้ว ยังมีประโยชน์ที่จะต้องทราบ:

\ d [table_name] - จะแสดงคอลัมน์ทั้งหมดสำหรับตารางที่ระบุรวมถึงข้อมูลประเภทการอ้างอิงและข้อ จำกัด ของคีย์


6

คุณสามารถแสดงรายการตารางในฐานข้อมูลปัจจุบันด้วย \dtคุณสามารถแสดงรายการตารางในฐานข้อมูลปัจจุบันด้วย

FWIW, \d tablenameจะแสดงรายละเอียดเกี่ยวกับตารางที่กำหนดบางอย่างเช่นshow columns from tablenameใน MySQL แต่มีข้อมูลเพิ่มเติมเล็กน้อย


5

ใช้psql : \ dt

หรือ:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1

3

ก่อนอื่นคุณต้องเชื่อมต่อกับฐานข้อมูลของคุณเช่น

ฐานข้อมูลของฉันคือ Ubuntu

ใช้คำสั่งนี้เพื่อเชื่อมต่อ

 \c ubuntu

ข้อความนี้จะแสดง

"คุณกำลังเชื่อมต่อกับฐานข้อมูล" อูบุนตู "ในฐานะผู้ใช้" postgres "

ตอนนี้

เรียกใช้คำสั่งนี้เพื่อแสดงตารางทั้งหมดในนั้น

\d+

3

วิธีที่ตรงไปตรงมาที่สุดในรายการตารางทั้งหมดที่บรรทัดคำสั่งคือเพื่อความชอบของฉัน:

psql -a -U <user> -p <port> -h <server> -c "\dt"

สำหรับฐานข้อมูลที่กำหนดให้เพิ่มชื่อฐานข้อมูล:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

มันทำงานได้ทั้งบน Linux และ Windows


3

ในฐานะผู้ออกตั๋วด่วน

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

หรือถ้าคุณชอบ json output multi-liner ที่ชัดเจนกว่า:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq

1

\ dt จะแสดงรายการตารางและ "\ pset pager off" จะแสดงตารางเหล่านั้นในหน้าต่างเดียวกันโดยไม่ต้องสลับไปใช้ตารางแยกต่างหาก รักคุณสมบัติที่จะตายใน dbshell



0

ก่อนอื่นให้ป้อนฐานข้อมูลที่คุณต้องการเชื่อมต่อ

\c database_name

จากนั้นจะแสดงตารางทั้งหมดในสคีมาปัจจุบัน:

\dt

-2

ก่อนอื่นคุณสามารถเชื่อมต่อกับฐานข้อมูล postgres ของคุณโดยใช้ postgre.app บน mac หรือใช้ postico รันคำสั่งต่อไปนี้:

psql -h localhost -p port_number -d database_name -U user_name -W

จากนั้นคุณป้อนรหัสผ่านของคุณซึ่งจะช่วยให้เข้าถึงฐานข้อมูลของคุณ

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