Skip to content

Commit 653da8c

Browse files
committed
list foreign tables
1 parent ef7d562 commit 653da8c

File tree

2 files changed

+28
-44
lines changed

2 files changed

+28
-44
lines changed

dbcommands.sql

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -636,15 +636,33 @@ pg_catalog.pg_get_functiondef(
636636
END
637637
) AS source
638638

639+
-- name: list_foreign_tables_verbose
640+
-- docs: ("\\dE", "\\dE[+] [pattern]", "List foreign tables.", aliases=())
641+
SELECT
642+
n.nspname AS "Schema",
643+
c.relname AS "Name",
644+
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'table' WHEN 'I' THEN 'index' END as "Type",
645+
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner",
646+
pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) AS "Size",
647+
pg_catalog.obj_description(c.oid, 'pg_class') AS "Description"
648+
FROM
649+
pg_catalog.pg_class c
650+
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
651+
WHERE
652+
c.relkind IN ('f', '')
653+
AND n.nspname <> 'pg_catalog'
654+
AND n.nspname <> 'information_schema'
655+
AND n.nspname !~ '^pg_toast'
656+
AND pg_catalog.pg_table_is_visible(c.oid)
657+
AND c.relname OPERATOR (pg_catalog. ~) :pattern
658+
ORDER BY 1, 2
639659
-- name: list_foreign_tables
640660
-- docs: ("\\dE", "\\dE[+] [pattern]", "List foreign tables.", aliases=())
641661
SELECT
642-
n.nspname AS "schema",
643-
c.relname AS "name",
644-
:relkind AS "type",
645-
pg_catalog.pg_get_userbyid(c.relowner) AS "owner",
646-
pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) AS "size",
647-
pg_catalog.obj_description(c.oid, 'pg_class') AS "description"
662+
n.nspname AS "Schema",
663+
c.relname AS "Name",
664+
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'table' WHEN 'I' THEN 'index' END as "Type",
665+
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
648666
FROM
649667
pg_catalog.pg_class c
650668
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace

pgspecial/dbcommands.py

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,46 +1640,12 @@ def shell_command(cur, pattern, verbose):
16401640

16411641
@special_command("\\dE", "\\dE[+] [pattern]", "List foreign tables.", aliases=())
16421642
def list_foreign_tables(cur, pattern, verbose):
1643-
params = {}
1644-
query = SQL(
1645-
"""
1646-
SELECT n.nspname as "Schema",
1647-
c.relname as "Name",
1648-
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'table' WHEN 'I' THEN 'index' END as "Type",
1649-
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
1650-
{verbose_cols}
1651-
FROM pg_catalog.pg_class c
1652-
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
1653-
WHERE c.relkind IN ('f','')
1654-
AND n.nspname <> 'pg_catalog'
1655-
AND n.nspname <> 'information_schema'
1656-
AND n.nspname !~ '^pg_toast'
1657-
AND pg_catalog.pg_table_is_visible(c.oid)
1658-
{filter}
1659-
ORDER BY 1,2;
1660-
"""
1661-
)
1662-
1643+
_, tbl_name = sql_name_pattern(pattern)
1644+
pattern = f"^({tbl_name})$" if tbl_name else ".*"
16631645
if verbose:
1664-
params["verbose_cols"] = SQL(
1665-
"""
1666-
, pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size",
1667-
pg_catalog.obj_description(c.oid, 'pg_class') as "Description" """
1668-
)
1669-
else:
1670-
params["verbose_cols"] = SQL("")
1671-
1672-
if pattern:
1673-
_, tbl_name = sql_name_pattern(pattern)
1674-
params["filter"] = SQL(" AND c.relname OPERATOR(pg_catalog.~) {} ").format(
1675-
f"^({tbl_name})$"
1676-
)
1646+
cur.execute(queries.list_foreign_tables_verbose.sql, {"pattern": pattern})
16771647
else:
1678-
params["filter"] = SQL("")
1679-
1680-
formatted_query = query.format(**params)
1681-
log.debug(formatted_query.as_string(cur))
1682-
cur.execute(formatted_query)
1648+
cur.execute(queries.list_foreign_tables.sql, {"pattern": pattern})
16831649
if cur.description:
16841650
headers = [x.name for x in cur.description]
16851651
return [(None, cur, headers, cur.statusmessage)]

0 commit comments

Comments
 (0)