【问题标题】:How to apply upgrade scripts to multiple PostgreSQL schema at once?如何一次将升级脚本应用于多个 PostgreSQL 模式?
【发布时间】:2023-03-19 04:26:01
【问题描述】:
我正在尝试在 PostgreSQL 上使用单数据库/多模式创建多租户 SaaS 应用程序。我想知道是否有办法在 PostgreSQL 中使用单个命令升级多个模式。
我正在寻找这样的东西:
CREATE TABLE tenants_*.users (id VARCHAR(255) PRIMARY KEY NOT NULL);
注意:我也在使用 Liquibase 进行架构迁移,但发现无法使用 Liquibase 进行多架构升级。
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签:
sql
database
postgresql
liquibase
saas
【解决方案1】:
在纯 SQL 中没有内置的方法来执行此操作,但您可以使用 plpgsql:
DO
$$
DECLARE
schemaname name;
BEGIN
FOR schemaname IN SELECT nspname FROM pg_namespace WHERE nspname LIKE 'tenants_%' LOOP
EXECUTE format('CREATE TABLE %I.users (id text PRIMARY KEY);', schemaname);
END LOOP;
END;
$$ LANGUAGE plpgsql;
附带说明一下,您可能不希望有字符限制的 varchar 列,因为它在 PostgreSQL 中没有实际好处。只需使用文本,除非您出于某种原因确实希望将您的值截断为 255 个字符。