H2:更改现有表的架构

Posted

技术标签:

【中文标题】H2:更改现有表的架构【英文标题】:H2: Change schema of an existing table 【发布时间】:2021-03-01 13:54:51 【问题描述】:

是否可以更改 H2 中现有表的架构?

例如在我的项目中,我在 Postgres 中更改表的 shema:

ALTER TABLE my_table SET SCHEMA gestion;

但在我对 H2 的测试中,我遇到了错误 expected "REFERENTIAL_INTEGRITY";

所以我尝试用

禁用 REFERENTIAL_INTEGRITY

ALTER TABLE my_table SET REFERENTIAL_INTEGRITY FALSE;

但是没有结果,我也有同样的错误。

有什么想法吗?谢谢

【问题讨论】:

【参考方案1】:

不,目前不可能,从当前来源编译的 H2 1.4.200 和 H2 都不支持。 SQL 标准也没有定义这样的操作,它完全是特定于供应商的。

您只能创建一个新表并将旧表的内容复制到其中(例如CREATE TABLE gestion.my_table AS TABLE my_table,但将表的完整定义添加到此命令会更安全)。您还需要为新表创建所有约束和索引。如果其他一些表引用了这个表,你还需要自己更新这些引用。之后,您可以删除旧表。

【讨论】:

感谢您的回复。所以你建议不要在 Postgres 中使用命令 ALTER TABLE my_table SET SCHEMA gestion; 吗? 您可以在 PostgreSQL 中使用此命令。但是 H2 需要一些其他的解决方案。只有当你想在两个 DBMS 上使用完全相同的命令时,你也应该在 PostgreSQL 中避免这个命令,但实际上它们还有许多其他差异,所以如果你真的需要同时支持它们,很可能你需要编写不同的 SQL不时为他们服务。

以上是关于H2:更改现有表的架构的主要内容,如果未能解决你的问题,请参考以下文章

H2 - 如何创建将行更改记录到另一个表的数据库触发器?

如何在 SQL 中更改现有表的列长度?

Databricks - 如何更改现有 Delta 表的分区?

如何使用 liquibase 更改架构名称

更改 Hive 表的架构

sql 更改表的架构