我有一个大约有500万行的表,它有一个fk约束引用另一个表的主键(也大约有500万行).
我需要从两个表中删除大约75000行.我知道如果我尝试在启用fk约束的情况下执行此操作,则会花费不可接受的时间.
来自Oracle背景我首先想到的是禁用约束,执行删除然后重新启用约束.如果我是超级用户,PostGres似乎让我禁用约束触发器(我不是,但我以拥有/创建对象的用户身份登录),但这似乎不是我想要的.
另一种选择是删除约束,然后恢复它.考虑到桌子的大小,我担心重建约束会花费很长时间.
有什么想法吗?
编辑:在比利的鼓励之后,我尝试在不改变任何限制的情况下进行删除,并且需要超过10分钟.但是,我发现我正在尝试删除的表具有自引用外键...重复(非索引).
最后的更新 - 我删除了自我引用的外键,删除并添加回来.比利是正确的,但不幸的是我不能接受他的评论作为答案!
我感兴趣的是hibernate.hbm2ddl.auto = validate实际上是如何工作的,我很难找到全面的文档.
我们最近发现生产系统受到http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532的影响(Hibernate在名称上匹配外键,而不是签名,所以会为你重新创建它们)和hibernate .hbm2ddl.auto =正在从我们的下一个版本中删除更新.
我很乐意完全摆脱hibernate.hbm2ddl.auto并自己管理我们的数据库.但是,并非所有同事都分享这个世界观,有些人热衷于在hibernate.hbm2ddl.auto = validate中添加.
我担心这会遇到同样的问题,我有兴趣找到有关此验证实际工作原理的更多文档.Hibernate社区文档(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html)实际上只是引用了这些值.
有没有人有任何好的文档指针,或在生产系统中使用验证的任何实际经验?
我需要更新Postgres(8.3)数据库中的表中的一些时间戳列.
我的查询(简化)如下所示:
update table1 set dateA = dateA + interval '10 hours' where id = 1234;
Run Code Online (Sandbox Code Playgroud)
这是脚本的一部分,需要更新很多,所以我的首选是使用绑定变量,而不是每次都要构建查询字符串.这意味着我的查询变为:
update table1 set dateA = dateA + interval '? hours' where id = ?;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,抱怨是我只提供了2个绑定变量,只需要一个.
如果我试图把?外面的引号标记:
update table1 set dateA = dateA + interval ? ' hours' where id = ?;
Run Code Online (Sandbox Code Playgroud)
我明白了:
... syntax error at or near "' hours'"
Run Code Online (Sandbox Code Playgroud)
看起来好像查询已被解释为
... dateA = dateA + interval '10' ' hours' ...
Run Code Online (Sandbox Code Playgroud)
我在文档中找不到任何帮助......有什么建议吗?
谢谢
我正在编写一些Perl脚本来操作两个PostgreSQL数据库中的大量数据(总共大约4200万行,但不会在一次命中中完成).
对于我的一些查询,使用它是合理的,fetchall_hashref因为我有合成键.但是,在其他情况下,我将使用三列数组作为唯一键.
这让我想知道fetchall_arrayref和之间的性能差异fetchall_hashref.我知道在这两种情况下,一切都进入内存,因此选择几GB数据可能不是一个好主意,但除此之外,在性能方面,文档中似乎没有什么指导.
我的谷歌搜索没有成功,所以如果有人能指出我的一些一般性能研究的方向,我将不胜感激.
(我知道我可以自己对此进行基准测试,但不幸的是,出于开发目的,我无法访问具有相同硬件和生产的机器,这就是为什么我正在寻找一般指导方针甚至是最佳实践).
(我已经搜索过,但没有找到这个问题的副本,但很高兴得到证明).
我需要从一些Python代码中旋转日志.代码在Windows上运行(Server 2008 R2).
最初我使用TimedRotatingFileHandler(来自Python的logging.handlers包),但这不能正常工作,因为我所理解的是它与多处理有关的问题(subprocess.check_call用于启动另一个应用程序).
我已经检查了ConcurrentLogHandler,看起来它可能会起作用,但我有点担心自2013年以来它没有更新(虽然最近提出了问题).
更新:一个开放的bug(自2013年起)表明ConcurrentLogHandler不能与Python 2.7/Windows一起使用.在记录时,代码就会挂起.
我应该使用最佳实践Windows解决方案吗?
我一直在帮助某人调试一些代码,其中错误消息是"Day too big".我知道这源于当地时间和Y2038错误(大多数谷歌搜索结果似乎是人们处理将来到期的cookie).
我们似乎通过使用时间来获取当前日期来"解决"问题.但是,鉴于我们的原始日期都没有达到2038年的问题,我怀疑我们实际上已经解决了这个问题......
还有其他情况,任何人都知道一个人会在哪里打"天太大"?
操作系统是Solaris.
示例代码 - 实际代码非常大,我正在使用的人实际上没有隔离有问题的部分(这就是为什么我担心'修复'实际上不是一个修复).如果我能把一些简洁的东西放在一起再现这个问题,我会发布!
UPDATE
我分离了一些代码,在所有内容周围放置了一些打印语句并解决了问题...
令人讨厌的代码行是:
$temp = str2time(localtime());
Run Code Online (Sandbox Code Playgroud)
这通常(但不总是)将$ temp设置为undef.事实证明,即使设置了$ temp,也没有设置预期值.
问题是localtime()在大多数情况下返回一个数组......这就是搞乱str2time的调用.
通过将其更改为:
$ltime = localtime;
$temp = str2time($ltime);
Run Code Online (Sandbox Code Playgroud)
问题消失了.
当然,更好的是,只需使用:
$temp = time;
Run Code Online (Sandbox Code Playgroud) perl ×2
postgresql ×2
constraints ×1
date ×1
dbi ×1
hbm2ddl ×1
hibernate ×1
java ×1
log-rotation ×1
orm ×1
performance ×1
python ×1
windows ×1