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_INTEGRITYALTER 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:更改现有表的架构的主要内容,如果未能解决你的问题,请参考以下文章