List tables in a PostgreSQL schema

前端 未结 4 1324
攒了一身酷
攒了一身酷 2020-12-12 08:40

When I do a \\dt in psql I only get a listing of tables in the current schema (public by default).

How can I get a list of all tables in al

相关标签:
4条回答
  • 2020-12-12 09:06

    You can select the tables from information_schema

    SELECT * FROM information_schema.tables 
    WHERE table_schema = 'public'
    
    0 讨论(0)
  • 2020-12-12 09:19

    For those coming across this in the future:

    If you would like to see a list of relations for several schemas:

    $psql mydatabase
    mydatabase=# SET search_path TO public, usa;   #schema examples
    SET
    mydatabase=# \dt
                  List of relations
     Schema |      Name       | Type  |  Owner
    --------+-----------------+-------+----------
     public | counties        | table | postgres
     public | spatial_ref_sys | table | postgres
     public | states          | table | postgres
     public | us_cities       | table | postgres
     usa    | census2010      | table | postgres
    
    0 讨论(0)
  • 2020-12-12 09:21

    In all schemas:

    => \dt *.*
    

    In a particular schema:

    => \dt public.*
    

    It is possible to use regular expressions with some restrictions

    \dt (public|s).(s|t)
           List of relations
     Schema | Name | Type  | Owner 
    --------+------+-------+-------
     public | s    | table | cpn
     public | t    | table | cpn
     s      | t    | table | cpn
    

    Advanced users can use regular-expression notations such as character classes, for example [0-9] to match any digit. All regular expression special characters work as specified in Section 9.7.3, except for . which is taken as a separator as mentioned above, * which is translated to the regular-expression notation .*, ? which is translated to ., and $ which is matched literally. You can emulate these pattern characters at need by writing ? for ., (R+|) for R*, or (R|) for R?. $ is not needed as a regular-expression character since the pattern must match the whole name, unlike the usual interpretation of regular expressions (in other words, $ is automatically appended to your pattern). Write * at the beginning and/or end if you don't wish the pattern to be anchored. Note that within double quotes, all regular expression special characters lose their special meanings and are matched literally. Also, the regular expression special characters are matched literally in operator name patterns (i.e., the argument of \do).

    0 讨论(0)
  • 2020-12-12 09:22

    Alternatively to information_schema it is possible to use pg_tables:

    select * from pg_tables where schemaname='public';
    
    0 讨论(0)
提交回复
热议问题