PostgreSQL: Tampilkan tabel dalam PostgreSQL

Jawaban:

2661

Dari psqlantarmuka baris perintah,

Pertama, pilih basis data Anda

\c database_name

Kemudian, ini menunjukkan semua tabel dalam skema saat ini:

\dt

Secara terprogram (atau dari psqlantarmuka juga, tentu saja):

SELECT * FROM pg_catalog.pg_tables;

Tabel sistem hidup dalam pg_catalogdatabase.

Mihai Limbășan
sumber
102
@StephenCorwin Tidak, \lsetara dengan show databasesdi MySQL. dtshow tablesdan lshow databases
user454322
12
\dtsangat bermanfaat. Yang pg_catalog.pg_tablesitu jauh lebih sedikit, karena tampaknya menyatukan tabel internal bersama dengan yang dibuat pengguna untuk database apa pun yang kebetulan Anda sambungkan.
Agustus
33
psql my_db_nameharus dijalankan \dtuntuk bekerja. Ketika saya berlari psqltanpa nama basis data, saya mendapat pesan "Tidak ditemukan hubungan"
Maksim Dmitriev
31
Tanpa tabel sistem:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White
39
Anda pertama-tama harus \c <DATABASE_NAME>memilih basis data Anda.
danio
200

Masuk sebagai superuser:

sudo -u postgres psql

Anda dapat membuat daftar semua database dan pengguna dengan \lperintah, (daftar perintah lain dengan\? ).

Sekarang jika Anda ingin melihat database lain, Anda dapat mengubah pengguna / database dengan \cperintah seperti \c template1, \c postgres postgresdan menggunakan \d, \dtatau \dSuntuk melihat tabel / tampilan / dll.

JLarky
sumber
1
Ini adalah jawaban yang lebih baik, karena seseorang biasanya memiliki lebih dari satu basis data yang diinstal.
Jerome
Ini sangat membantu. Terima kasih.
Promise Preston
123

(Untuk kelengkapan)

Anda juga dapat menanyakan skema informasi (standar SQL) :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');
Milen A. Radev
sumber
3
+1 walaupun untuk kelengkapan, tabel acara mysql hanya menunjukkan skema saat ini, ada baiknya memikirkannya dengan cara ini, mysql hanya memiliki satu database tetapi beberapa skema, di mana postgresql dapat memiliki banyak basis data (katalog) dan skema. Jadi equiv harus table_schema = 'DB_NAME';
Rahly
Tidak persis sql standar, tidak dapat menggunakan "||" untuk menyatukan string pada
mssql
123

Anda dapat menggunakan terminal interaktif PostgreSQL Psql untuk menampilkan tabel dalam PostgreSQL.

1. Mulai Psql

Biasanya Anda dapat menjalankan perintah berikut untuk masuk ke psql:

psql DBNAME USERNAME

Sebagai contoh, psql template1 postgres

Satu situasi yang mungkin Anda miliki adalah: misalkan Anda login sebagai root, dan Anda tidak ingat nama database. Anda bisa masuk dulu ke Psql dengan menjalankan:

sudo -u postgres psql

Di beberapa sistem, perintah sudo tidak tersedia, Anda bisa menjalankan salah satu perintah di bawah ini:

psql -U postgres
psql --username=postgres

2. Tampilkan tabel

Sekarang di Psql Anda bisa menjalankan perintah seperti:

  1. \? daftar semua perintah
  2. \l daftar basis data
  3. \conninfo menampilkan informasi tentang koneksi saat ini
  4. \c [DBNAME] terhubung ke database baru, misalnya, \c template1
  5. \dt daftar tabel skema publik
  6. \dt <schema-name>.* daftar tabel skema tertentu, misalnya, \dt public.*
  7. \dt *.* daftar tabel semua skema
  8. Kemudian Anda dapat menjalankan pernyataan SQL, misalnya, SELECT * FROM my_table;(Catatan: pernyataan harus diakhiri dengan titik koma ;)
  9. \q keluar dari psql
Yuci
sumber
52
  1. Login pertama sebagai pengguna postgres:

    sudo su - postgres

  2. terhubung ke db yang dibutuhkan: psql -d databaseName

  3. \dt akan mengembalikan daftar semua tabel dalam database yang terhubung dengan Anda.

nish
sumber
40

Menjalankan psql dengan flag -E akan menggemakan kueri yang digunakan secara internal untuk mengimplementasikan \ dt dan yang serupa:

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;        
**************************
bsb
sumber
1
BTW, TOAST digunakan untuk menyimpan nilai besar: postgresql.org/docs/8.3/static/storage-toast.html
Dorian
39

Login sebagai pengguna super sehingga Anda dapat memeriksa semua database dan skema mereka: -

sudo su - postgres

Kemudian kita bisa menuju shell postgresql dengan menggunakan perintah berikut: -

psql

Anda sekarang dapat memeriksa semua daftar database dengan menggunakan perintah berikut: -

\l

Jika Anda ingin memeriksa ukuran basis data juga gunakan: -

\l+

Tekan quntuk kembali.

Setelah Anda menemukan database Anda sekarang, Anda dapat terhubung ke database itu menggunakan perintah berikut: -

\c database_name

Setelah terhubung, Anda dapat memeriksa tabel atau skema basis data dengan: -

\d

Sekarang untuk kembali menggunakan shell: -

q

Sekarang untuk lebih jauh melihat detail penggunaan tabel tertentu: -

\d table_name

Untuk kembali ke postgresql_shell tekan \q.

Dan untuk kembali ke terminal, tekan exit.

Shashishekhar Hasabnis
sumber
24

Jika Anda hanya ingin melihat daftar tabel yang Anda buat, Anda hanya dapat mengatakan:

\dt

Tetapi kami juga memiliki PATTERNyang akan membantu Anda menyesuaikan tabel mana yang akan ditampilkan. Untuk menampilkan semua termasuk pg_catalogSkema, Anda dapat menambahkan *.

\dt *

Jika kamu melakukan: \?

\ dt [S +] [POLA] daftar tabel

Banned_User
sumber
23

gunakan hanya melihat tabel

=> \dt

jika ingin melihat tabel skema

=>\dt+

jika Anda ingin melihat tabel skema tertentu

=>\dt schema_name.* 
Arya
sumber
Aku cukup yakin Anda membingungkan +dengan S. Yang terakhir (surat) menunjukkan tabel skema. The +hanya menunjukkan informasi tambahan.
Garret Wilson
20

Pertama Hubungkan dengan Database menggunakan perintah berikut

\c database_name

Dan Anda akan melihat pesan ini - You are now connected to database database_name. Dan mereka menjalankan perintah berikut

SELECT * FROM table_name;

Dalam database_name dan table_name, perbarui saja dengan database dan nama tabel Anda

J4cK
sumber
20
Saya tidak yakin ini menjawab pertanyaan. Saya pikir OP sedang mencoba untuk mengetahui semua tabel dalam database-nya, tidak mendapatkan semua baris dari tabel tertentu dalam database-nya ... kan?
Meringkuk
16

Jika Anda menggunakan pgAdmin4 di PostgreSQL, Anda dapat menggunakan ini untuk menampilkan tabel di database Anda:

select * from information_schema.tables where table_schema='public';
Reynante Daitol
sumber
14

Perhatikan bahwa \dtsendirian akan mencantumkan tabel dalam skema publik dari database yang Anda gunakan. Saya suka menyimpan meja saya di skema terpisah, jadi jawaban yang diterima tidak bekerja untuk saya.

Untuk mendaftar semua tabel dalam skema tertentu , saya perlu:

1) Hubungkan ke database yang diinginkan:

psql mydb

2) Tentukan nama skema yang ingin saya lihat tabel setelah \dtperintah, seperti ini:

\dt myschema.*

Ini menunjukkan kepada saya hasil yang saya minati:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres
rotarydial
sumber
12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Abdelhak Ohammou
sumber
8

\ dt (tidak * diperlukan) - akan mendaftar semua tabel untuk database yang sudah ada yang sudah terhubung dengan Anda. Juga berguna untuk diperhatikan:

\ d [table_name] - akan menampilkan semua kolom untuk tabel yang diberikan termasuk informasi jenis, referensi dan batasan kunci.

pengguna4642897
sumber
6

Anda bisa daftar tabel dalam database saat ini dengan \dt .

Fwiw, \d tablenameakan menampilkan detail tentang tabel yang diberikan, seperti show columns from tablenamedi MySQL, tetapi dengan sedikit informasi lebih lanjut.

JohnK
sumber
5

Menggunakan psql : \ dt

Atau:

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
MisterJoyson
sumber
3

Pertama-tama Anda harus terhubung dengan database Anda seperti

basis data saya adalah ubuntu

gunakan perintah ini untuk terhubung

 \c ubuntu

Pesan ini akan ditampilkan

"Anda sekarang terhubung ke basis data" ubuntu "sebagai pengguna" postgres "."

Sekarang

Jalankan perintah ini untuk menampilkan semua tabel di dalamnya

\d+
Usman Yaqoob
sumber
3

Cara paling mudah untuk mendaftar semua tabel di command line adalah, untuk seleraku:

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

Untuk database yang diberikan cukup tambahkan nama database:

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

Ia bekerja di Linux dan Windows.

Alain Cherpin
sumber
3

sebagai oneliner cepat

# 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'

atau jika Anda lebih suka json output multi-liner yang lebih jelas:

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
Yordan Georgiev
sumber
1

\ dt akan mencantumkan tabel, dan "\ pset pager off" menampilkannya di jendela yang sama, tanpa beralih ke yang terpisah. Sukai fitur itu sampai mati di dbshell.

lauri108
sumber
0

Untuk melihat tabel asing di psql, jalankan \dE

Ian Hunter
sumber
0

Pertama, masukkan basis data mana yang perlu Anda hubungkan

\c database_name

Kemudian, ini menunjukkan semua tabel dalam skema saat ini:

\dt
Poonkodi
sumber
-2

Pertama, Anda dapat terhubung dengan database postgres Anda menggunakan postgre.app di mac atau menggunakan postico. Jalankan perintah berikut:

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

kemudian Anda memasukkan kata sandi Anda, ini akan memberikan akses ke database Anda

Patcho
sumber