CREATE TABLE IF NOT EXISTS ext_biz_relation_process
(
id SERIAL PRIMARY KEY,
biz_table VARCHAR(64) NOT NULL,
biz_id integer NOT NULL,
process_definition_id VARCHAR(64) NOT NULL,
process_instance_id VARCHAR(64) NOT NULL,
process_status SMALLINT NOT NULL,
created_by integer,
updated_by integer,
deleted_by integer,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at timestamp
);
COMMENT ON TABLE ext_biz_relation_process IS '业务与流程关联信息表';
COMMENT ON COLUMN ext_biz_relation_process.biz_table IS '业务对应的表名';
COMMENT ON COLUMN ext_biz_relation_process.biz_id IS '业务的ID';
COMMENT ON COLUMN ext_biz_relation_process.process_definition_id IS '流程定义ID';
COMMENT ON COLUMN ext_biz_relation_process.process_instance_id IS '流程实例ID';
COMMENT ON COLUMN ext_biz_relation_process.process_status IS '流程状态(0-未提交 1-运行中 2-已结束)';
COMMENT ON COLUMN ext_biz_relation_process.created_by IS '创建人ID';
COMMENT ON COLUMN ext_biz_relation_process.updated_by IS '更新人ID';
COMMENT ON COLUMN ext_biz_relation_process.deleted_by IS '删除人ID';
COMMENT ON COLUMN ext_biz_relation_process.created_at IS '创建时间';
COMMENT ON COLUMN ext_biz_relation_process.updated_at IS '更新时间';
COMMENT ON COLUMN ext_biz_relation_process.deleted_at IS '删除时间';
PostgreSQLIn PostgreSQL, index names must be unique across the entire schema.
PostgreSQL在PostgreSQL中,索引名称在整个模式中必须是唯一的。
CREATE INDEX idx_ebrp_biz_table_id ON ext_biz_relation_process(biz_table, biz_id);
CREATE INDEX idx_ebrp_process_instance_id ON ext_biz_relation_process(process_instance_id);
CREATE INDEX idx_ebrp_process_definition_id ON ext_biz_relation_process(process_definition_id);
-- 关闭外键约束检查:SET session_replication_role = 'replica'; 这行代码会临时关闭外键约束检查,从而避免在删除表时因外键约束而产生错误。
-- 删除所有表:借助 DO 语句和 FOR 循环,查询 pg_tables 系统表以获取 public 模式下的所有表名,然后使用 DROP TABLE 语句将这些表删除。CASCADE 选项可确保在删除表时,与之关联的依赖对象(如视图、触发器等)也会被一并删除。
-- 删除所有索引:同样使用 DO 语句和 FOR 循环,查询 pg_indexes 系统表以获取 public 模式下的所有索引名,再使用 DROP INDEX 语句将这些索引删除。
-- 恢复外键约束检查:SET session_replication_role = 'origin'; 这行代码会恢复外键约束检查。-- 关闭外键约束检查
SET session_replication_role = 'replica';
-- 删除所有表
DO $$
DECLARE
table_record record;
BEGIN
FOR table_record IN
SELECT tablename
FROM pg_tables
WHERE schemaname = 'public'
LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(table_record.tablename) || ' CASCADE';
END LOOP;
END $$;
-- 删除所有索引
DO $$
DECLARE
index_record record;
BEGIN
FOR index_record IN
SELECT indexname
FROM pg_indexes
WHERE schemaname = 'public'
LOOP
EXECUTE 'DROP INDEX IF EXISTS ' || quote_ident(index_record.indexname);
END LOOP;
END $$;
-- 恢复外键约束检查
SET session_replication_role = 'origin';
-- 查询全部表
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
-- 查询全部索引
SELECT tablename, indexname FROM pg_indexes WHERE schemaname = 'public';
SELECT * FROM pg_indexes WHERE schemaname = 'public';
-- 创建表,如果表不存在
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
-- 创建索引,如果索引不存在
CREATE INDEX IF NOT EXISTS idx_users_email ON users (email);
-- 唯一索引 CREATE INDEX IF NOT EXISTS 语法是从 9.5 版本开始支持的,不过它并不支持创建唯一索引。
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_indexes
WHERE schemaname = 'public'
AND tablename = 'users'
AND indexname = 'idx_unique_users_email'
) THEN
CREATE UNIQUE INDEX idx_unique_users_email ON users (email);
END IF;
END $$;