在 Postgres 表和列上跟踪我自己的自定义元数据

Bas*_*que 7 postgresql metadata postgresql-9.6

有什么方法可以将我自己的元数据添加到Postgres 中的表和列中,例如短文本的键值对?

我正在从另一个数据库系统迁移表、列和数据。另一个系统具有在 Postgres 不匹配的表和列上定义的属性。例如,在其他数据库系统中,可以为每个表分配一种颜色,用于数据库结构的图形显示,例如CUSTOMER_表为绿色,INVOICE_表为红色。

所以我想要一种方法来跟踪我的 Postgres 数据库中的这些属性设置,这样我的 Java 应用程序就可以通过 JDBC 查询自定义元数据。

SET attribute ?

我注意到:

ALTER TABLE … SET ( attribute_option = value [, ... ] )
Run Code Online (Sandbox Code Playgroud)

…和…

ALTER TABLE … ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
Run Code Online (Sandbox Code Playgroud)

的文档ALTER TABLE并没有真正解释这些属性的作用。我可以创建自己的属性名称以用作映射到我自己的元数据值的键吗?

或者是否有其他方法可以让 Postgres 记住我自己的自定义元数据?

Comment

我想一种解决方法可能是将键值对作为文本嵌入每个表和列上的COMMENT属性。看起来有点像黑客,有点乱,因为我经常使用 COMMENT 将业务规则记录为散文。但我想它会起作用。有没有更好的方法来记住每表和每列的属性?

Extended Properties Microsoft SQL Server 的

显然,MS SQL Server 为此类元数据提供了“扩展属性”功能。说明这里对堆栈溢出,并在这里对微软文档

也许在 Postgres 中有类似的东西?

附加表

当然,我可以定义自己的额外表来存储这些元数据。但我希望与目标表和列相关的东西对维护这个应用程序的人来说更明显。如果 Postgres 已经为我提供了某种自定义元数据工具,那么重新发明轮子就没有意义了。

小智 4

通常,最便携的方法是拥有自己的元数据表,例如:

create table meta(
  table_name text not null,
  column_name text not null,
  attribute_name text not null,
  attribute_value text not null,
  primary key (table_name, column_name, attribute_name)
);
Run Code Online (Sandbox Code Playgroud)
  • 此方法适用于任何数据库
  • 对元数据的访问是通过标准 SQL 完成的
  • 迁移和备份非常简单
  • attribute_value 可以是任何东西,你可以将其声明为 byte[]、text、json、jsonb,任何你想要的......