我正在使用sequelize,其背后有一个postgres数据库,有时我需要在运行时创建表。它通常可以工作,但我想知道是否可以检查数据库中是否已存在表。我知道sequelize正在使用类似“CREATE TABLE IF NOT EXITS ...”之类的东西,但我想知道在我的代码中该表是否存在?
有什么想法吗?也许在定义模型的同步方法中?
最佳答案
一个非常简单的方法:
SELECT 1 FROM schema_name.table_name LIMIT 0;
如果表不存在则引发异常。 schema_name 是可选的。如果省略,则默认为“当前”模式,即 search_path
中的第一个模式。 .
或者:
SELECT 'schema_name.table_name'::regclass;
如果根本没有使用该名称(常规表、序列、 View 、物化 View 、复合类型或 TOAST 表),则会引发异常。
或者您可以查询系统目录或统一信息模式来查找,而不会引发异常:
SELECT EXISTS (
SELECT 1
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'schema_name'
AND c.relname = 'table_name'
AND c.relkind = 'r' -- only tables ...(?)
);
更多详细信息的相关答案:
关于postgresql - Sequelize 检查表是否已创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588309/