我正在使用sequelize和postgres数据库,我有时会在运行时创建表。它通常有效,但我想知道是否有可能检查数据库中是否已存在表。我知道sequelize使用的是像#34; CREATE TABLE IF NOT NOT EXITS ...",但我想在我的代码中知道表是否存在?
有什么想法吗?也许在define模型的sync方法中?
答案 0 :(得分:2)
一种非常简单的方法:
SELECT 1 FROM schema_name.table_name LIMIT 0;
如果表不存在,则引发异常。 schema_name是可选的。如果省略,则默认为" current" schema,search_path
中的第一个模式。
或者:
SELECT 'schema_name.table_name'::regclass;
如果名称尚未使用,则会引发异常(常规表,序列,视图,物化视图,复合类型或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 ...(?)
);
相关答案更多详情: