如何一次将升级脚本应用于多个 PostgreSQL 模式?
How to apply upgrade scripts to multiple PostgreSQL schema at once?
我正在尝试使用 one-database/multiple-schema 在 PostgreSQL 上创建多租户 SaaS 应用程序。我想知道是否有一种方法可以在 PostgreSQL 中使用单个命令升级多个模式。
我正在寻找这样的东西:
CREATE TABLE tenants_*.users (id VARCHAR(255) PRIMARY KEY NOT NULL);
注意:我也在使用 Liquibase 进行模式迁移,但发现无法使用 Liquibase 进行多模式升级。
如有任何帮助,我们将不胜感激。谢谢
在普通 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 个字符。
我正在尝试使用 one-database/multiple-schema 在 PostgreSQL 上创建多租户 SaaS 应用程序。我想知道是否有一种方法可以在 PostgreSQL 中使用单个命令升级多个模式。
我正在寻找这样的东西:
CREATE TABLE tenants_*.users (id VARCHAR(255) PRIMARY KEY NOT NULL);
注意:我也在使用 Liquibase 进行模式迁移,但发现无法使用 Liquibase 进行多模式升级。
如有任何帮助,我们将不胜感激。谢谢
在普通 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 个字符。