使用节点获取特定 Postgres 数据库中的所有表?
Fetch all tables in a particuler Postgres database using node?
我需要使用 node.js 获取特定 Postgres 数据库中的所有表。但没有找到任何方法来实现这一目标。有什么办法可以得到吗?
例如,假设我有一个名为 'TestDatabase' 的数据库,它包含 4 个表(假设它可以有更少或更多)Person、Company、Clothes、Animal。
我需要使用节点获取所有这些的名称。
我也在使用 node-postgres ('pg') 连接数据库。
这是一个通用的解决方案。使用以下查询:
SELECT
relname
FROM
pg_class
WHERE
relkind = 'r';
pg_class
是保存 table 类对象信息的系统目录。因此需要将 relkind
限制为 'r'。这将包括所有 table 类型。要进一步限制,请参阅下面 link 处的 relpersistence
。
https://www.postgresql.org/docs/current/catalog-pg-class.html
作为替代方法,您可以使用 information_schema
。它并不比系统目录中的 pg_* 对象更好,但它是标准化的并且更便携。这是:
select table_schema||'.'||table_name as table_fullname
from information_schema."tables"
where table_type = 'BASE TABLE'
and table_schema not in ('pg_catalog', 'information_schema');
系统对象已按此表达式过滤
table_schema not in ('pg_catalog', 'information_schema')
您可以进一步修改它以仅包含您需要的模式。
我需要使用 node.js 获取特定 Postgres 数据库中的所有表。但没有找到任何方法来实现这一目标。有什么办法可以得到吗?
例如,假设我有一个名为 'TestDatabase' 的数据库,它包含 4 个表(假设它可以有更少或更多)Person、Company、Clothes、Animal。 我需要使用节点获取所有这些的名称。
我也在使用 node-postgres ('pg') 连接数据库。
这是一个通用的解决方案。使用以下查询:
SELECT
relname
FROM
pg_class
WHERE
relkind = 'r';
pg_class
是保存 table 类对象信息的系统目录。因此需要将 relkind
限制为 'r'。这将包括所有 table 类型。要进一步限制,请参阅下面 link 处的 relpersistence
。
https://www.postgresql.org/docs/current/catalog-pg-class.html
作为替代方法,您可以使用 information_schema
。它并不比系统目录中的 pg_* 对象更好,但它是标准化的并且更便携。这是:
select table_schema||'.'||table_name as table_fullname
from information_schema."tables"
where table_type = 'BASE TABLE'
and table_schema not in ('pg_catalog', 'information_schema');
系统对象已按此表达式过滤
table_schema not in ('pg_catalog', 'information_schema')
您可以进一步修改它以仅包含您需要的模式。