What's the equivalent to show tables (from MySQL) in PostgreSQL?
What's the equivalent to show tables (from MySQL) in PostgreSQL?
From the psql command line interface,
First, choose your database
\c database_name
Then, this shows all tables in the current schema:
\dt
Programmatically (or from the psql interface too, of course):
SELECT * FROM pg_catalog.pg_tables;
The system tables live in the pg_catalog database.
You can use PostgreSQL's interactive terminal Psql to show tables in PostgreSQL.
1. Start Psql
Usually you can run the following command to enter into psql:
psql DBNAME USERNAME
For example, psql template1 postgres
One situation you might have is: suppose you login as root, and you don't remember the database name. You can just enter first into Psql by running:
sudo -u postgres psql
In some systems, sudo command is not available, you can instead run either command below:
psql -U postgres
psql --username=postgres
2. Show tables
Now in Psql you could run commands such as:
\? list all the commands\l list databases\conninfo display information about current connection\c [DBNAME] connect to new database, e.g., \c template1\dt list tables of the public schema\dt <schema-name>.* list tables of certain schema, e.g., \dt public.*\dt *.* list tables of all schemasSELECT * FROM my_table;(Note: a statement must be terminated with semicolon ;)\q quit psql(For completeness)
You could also query the (SQL-standard) information schema:
SELECT
table_schema || '.' || table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
First login as postgres user:
sudo su - postgres
connect to the required db: psql -d databaseName
\dt would return the list of all table in the database you're connected to.
Login as a superuser so that you can check all the databases and their schemas:-
sudo su - postgres
Then we can get to postgresql shell by using following command:-
psql
You can now check all the databases list by using the following command:-
\l
If you would like to check the sizes of the databases as well use:-
\l+
Press q to go back.
Once you have found your database now you can connect to that database using the following command:-
\c database_name
Once connected you can check the database tables or schema by:-
\d
Now to return back to the shell use:-
q
Now to further see the details of a certain table use:-
\d table_name
To go back to postgresql_shell press \q.
And to return back to terminal press exit.
Those steps worked for me with PostgreSQL 13.3 and Windows 10
psql -a -U [username] -p [port] -h [server]\c [database] to connect to the database\dt or \d to show all tablesThe most straightforward way to list all tables at command line is, for my taste :
psql -a -U <user> -p <port> -h <server> -c "\dt"
For a given database just add the database name :
psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>
It works on both Linux and Windows.
This SQL Query works with most of the versions of PostgreSQL and fairly simple .
select table_name from information_schema.tables where table_schema='public' ;
(MySQL) shows tables list for current database
show tables;
(PostGreSQL) shows tables list for current database
select * from pg_catalog.pg_tables where schemaname='public';
as a quick oneliner
# 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'
or if you prefer much clearer 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
In PostgreSQL command-line interface after login, type the following command to connect with the desired database.
\c [database_name]
Then you will see this message You are now connected to database "[database_name]"
Type the following command to list all the tables.
\dt