Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行hibernate时对架构的更改_Hibernate_Postgresql - Fatal编程技术网

运行hibernate时对架构的更改

运行hibernate时对架构的更改,hibernate,postgresql,Hibernate,Postgresql,我正在开发一个高使用率的系统,它映射一些“只读”表和视图。在不同的时间点,我需要通过外部连接到数据库,用更新的版本替换这些表中的数据 我们正在使用postgres 8.3+和hibernate 3.2.6。外部“更新”过程将通过PSQL连接到数据库 对于一些较小的表,事务中的截断和插入应该是令人满意的 但是,有些表非常大,truncate/insert方法可能会将表锁定太长时间 在这种情况下,我正在考虑: 1) 表重命名-即在hibernate映射到表a时将新数据加载到表b中,然后通过PSQL从

我正在开发一个高使用率的系统,它映射一些“只读”表和视图。在不同的时间点,我需要通过外部连接到数据库,用更新的版本替换这些表中的数据

我们正在使用postgres 8.3+和hibernate 3.2.6。外部“更新”过程将通过PSQL连接到数据库

对于一些较小的表,事务中的截断和插入应该是令人满意的

但是,有些表非常大,truncate/insert方法可能会将表锁定太长时间

在这种情况下,我正在考虑:

1) 表重命名-即在hibernate映射到表a时将新数据加载到表b中,然后通过PSQL从表b->表a执行表重命名

-或-

2) 始终将hibernate映射到视图,并在填充表_b时重新定义视图以路由到表_b,而不是现在冗余的表_a

-或-

3) 创建并填充新模式,并在新模式就绪后更改hibernate用户的搜索路径

我不能100%确定这些方法在hibernate中的影响,尽管我将尽我所能进行测试,但很难测试冲突(即在重命名表时对表进行hibernate查询),因此非常感谢一些理论意见

如果有人尝试过类似的方法或知道潜在的陷阱,我将不胜感激


p、

您可以通过重命名事务中的表来利用PostgreSQL。这将从任何其他正在运行和未来事务的角度确保原子性


从Hybernate的角度来看,使缓存无效应该足以确保检索到的数据的新鲜度。

对于这个可能没有一个正确答案的错误问题,我深表歉意。。。