如何一次将升级脚本应用于多个 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 个字符。