#postgresql #backup #command-line #subset #schema #mind #multi-tenancy

app pg_parcel

考虑多租户的非常精简的pg_dump --data-only子集

5个版本 (2个稳定版)

1.2.0 2023年11月2日
1.0.0 2023年3月16日
0.4.3 2022年10月26日
0.3.1 2022年3月9日
0.3.0 2022年3月8日

#532 in 数据库接口

MIT/Apache

43KB
1.5K SLoC

pg_parcel

CI Release

考虑多租户的非常精简的pg_dump --data-only子集。解决https://postgrespro.com/list/thread-id/1715772的问题。

大多数选项通过配置文件指定。

column_name = "customer_id"
schema_name = "public"
database_url = "postgres://127.0.0.1:15432/postgres"
features = ["currency", "audit"]
skip_tables = [
  "_backup$",
  "^obsolete_"
  # ... more regular expressions
]

[overrides]
# We only want the one customer identified by --id on the command line
customers = """
  select * from customers where id in :ids
"""
# The `user_files` table doesn't have a customer_id column, so we need to join.
user_files = """
  select user_files.*
  from users_files
  join users on users.id = user_files.user_id
  where users.customer_id in :ids
"""
daily_exchange_rates = """
  select * from daily_exchange_rates
  where 'currency' = any (current_setting('pg_parcel.features')::text[])
"""
audit_log = """
  select * from audit_log
  where customer_id in :ids and
  (
    ARRAY['audit'] && (current_setting('pg_parcel.features')::text[])
    or created_at >= NOW() - INTERVAL '30 days'
    or updated_at >= NOW() - INTERVAL '30 days'
  );
"""
会话变量 包含
pg_parcel.ids 传递给--id的所有值的列表
pg_parcel.features pg_parcel.toml文件中定义的功能列表,减去使用--no-feature关闭的功能。如果设置了--features,则它们优先于配置文件,但--no-features是最终的。
pg_partial.feature.myfeature pg_parcel.features相同的规则,但每个设置一个变量。值只是true。覆盖查询仍然可以使用IN :ids,但现在会话变量更受青睐。

演示

screenshot

版本

我们为Linux x86_64 (任何发行版,使用musl)和macOS通用(Intel和Apple硅统一二进制文件)发布二进制文件。

要创建新版本,更新Cargo.toml并创建一个类似v1.2.3的标签(SemVer,前缀为v)。

许可证

根据以下之一授权:

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。

依赖项

~22–36MB
~678K SLoC