PostgreSQL Show Tables
Summary: in this tutorial, you will learn how to show tables in PostgreSQL usingpsql
tool andpg_catalog
schema.
MySQL offers a popularSHOW TABLES
statement that displays all tables in a specific database.
Unfortunately, PostgreSQL does not support theSHOW TABLES
statement directly but provides you with alternatives.
Showing tables from PostgreSQL using psql
First, open the Command Prompt on Windows or Terminal on Unix-like systems and connect to the PostgreSQL using psql client tool:
psql -U postgres
Second, change the current database to the one that you want to show tables:
\c dvdrental
Note that you can connect to a specific database when you log in to the PostgreSQL database server:
psql -U postgres -d dvdrental
In this command, the-d
flag meansdatabase. In this command, you connect to thedvdrental
database using thepostgres
user.
Third, use the\dt
command from the PostgreSQL command prompt to show tables in thedvdrental
database:
\dt
Output:
List of relations Schema | Name | Type | Owner--------+---------------+-------+---------- public | actor | table | postgres public | address | table | postgres public | category | table | postgres public | city | table | postgres public | country | table | postgres public | customer | table | postgres public | film | table | postgres public | film_actor | table | postgres public | film_category | table | postgres public | inventory | table | postgres public | language | table | postgres public | payment | table | postgres public | rental | table | postgres public | staff | table | postgres public | store | table | postgres(15 rows)
To get more information on tables, you can use the\dt+
command. It will add thesize
anddescription
columns:
\dt+
Output:
List of relations Schema | Name | Type | Owner | Persistence | Access method | Size | Description--------+---------------+-------+----------+-------------+---------------+------------+------------- public | actor | table | postgres | permanent | heap | 40 kB | public | address | table | postgres | permanent | heap | 88 kB | public | category | table | postgres | permanent | heap | 8192 bytes | public | city | table | postgres | permanent | heap | 64 kB | public | country | table | postgres | permanent | heap | 8192 bytes | public | customer | table | postgres | permanent | heap | 96 kB | public | film | table | postgres | permanent | heap | 736 kB | public | film_actor | table | postgres | permanent | heap | 272 kB | public | film_category | table | postgres | permanent | heap | 72 kB | public | inventory | table | postgres | permanent | heap | 232 kB | public | language | table | postgres | permanent | heap | 8192 bytes | public | payment | table | postgres | permanent | heap | 896 kB | public | rental | table | postgres | permanent | heap | 1232 kB | public | staff | table | postgres | permanent | heap | 16 kB | public | store | table | postgres | permanent | heap | 8192 bytes |(15 rows)
To show the details of a specific table, you can specify the name of the table after the \d command:
\d table_name
Or
\d+ table_name
For example, the following shows the structure of the actor table:
\d actor
Output:
Table "public.actor" Column | Type | Collation | Nullable | Default-------------+-----------------------------+-----------+----------+----------------------------------------- actor_id | integer | | not null | nextval('actor_actor_id_seq'::regclass) first_name | character varying(45)| | not null | last_name | character varying(45)| | not null | last_update | timestamp without time zone | | not null | now()Indexes: "actor_pkey" PRIMARY KEY, btree (actor_id) "idx_actor_first_name" btree (first_name) "idx_actor_last_name" btree (last_name)Referenced by: TABLE "film_actor" CONSTRAINT "film_actor_actor_id_fkey" FOREIGN KEY (actor_id) REFERENCES actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICTTriggers: last_updated BEFORE UPDATE ON actor FOR EACH ROW EXECUTE FUNCTION last_updated()
Showing tables using pg_catalog schema
The following statement retrieves the table in PostgreSQL from thepg_catalog.pg_tables
view:
SELECT*FROM pg_catalog.pg_tablesWHERE schemaname!= 'pg_catalog' AND schemaname!= 'information_schema';
Output:
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity------------+---------------+------------+------------+------------+----------+-------------+------------- public | actor | postgres | null | t | f | t | f public | store | postgres | null | t | f | t | f public | address | postgres | null | t | f | t | f public | category | postgres | null | t | f | t | f public | city | postgres | null | t | f | t | f public | country | postgres | null | t | f | t | f public | customer | postgres | null | t | f | t | f public | film_actor | postgres | null | t | f | t | f public | film_category | postgres | null | t | f | t | f public | inventory | postgres | null | t | f | t | f public | language | postgres | null | t | f | t | f public | rental | postgres | null | t | f | t | f public | staff | postgres | null | t | f | t | f public | payment | postgres | null | t | f | t | f public | film | postgres | null | t | f | t | f(15 rows)
In this query, we use a condition in theWHERE
clause to exclude the system tables. If you omit theWHERE
clause, you will get many tables including the system ones.
Summary
- Use the
\dt
or\dt+
command inpsql
to show tables in a specific database. - Use the
SELECT
statement to query table information from thepg_catalog.pg_tables
catalog.
Last updated on