首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新存储zodbpack错误

重新存储zodbpack错误
EN

Stack Overflow用户
提问于 2012-12-04 11:48:27
回答 1查看 359关注 0票数 0

每当我尝试运行zobbpack时,我都会生成错误:

column copg2.IntegrityError:列"zoid“中的空值违反了非空约束

你知道是什么原因造成的吗?如何修复它?

relstorage 1.5.1、postgres 8、plone 4.2.1.1

代码语言:javascript
复制
2012-12-03 13:18:03,485 [zodbpack] INFO Opening storage (RelStorageFactory)...
2012-12-03 13:18:03,525 [zodbpack] INFO Packing storage (RelStorageFactory).
2012-12-03 13:18:03,533 [relstorage] INFO pack: beginning pre-pack
2012-12-03 13:18:03,533 [relstorage] INFO pack: analyzing transactions committed Mon Nov 26 12:31:54 2012 or before
2012-12-03 13:18:03,536 [relstorage.adapters.packundo] INFO pre_pack: start with gc enabled
2012-12-03 13:18:03,759 [relstorage.adapters.packundo] INFO analyzing references from objects in 97907 new transaction(s)
2012-12-03 13:18:03,761 [relstorage.adapters.scriptrunner] WARNING script statement failed: '\n        INSERT INTO object_refs_added (tid)\n        VALUES (%(tid)s)\n        '; parameters: {'tid': 0L}
2012-12-03 13:18:03,761 [relstorage.adapters.packundo] ERROR pre_pack: failed
Traceback (most recent call last):
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 486, in pre_pack
    conn, cursor, pack_tid, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 580, in _pre_pack_with_gc
    self.fill_object_refs(conn, cursor, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 387, in fill_object_refs
    self._add_refs_for_tid(cursor, tid, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 459, in _add_refs_for_tid
    self.runner.run_script_stmt(cursor, stmt, {'tid': tid})
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/scriptrunner.py", line 52, in run_script_stmt
    cursor.execute(stmt, generic_params)
IntegrityError: null value in column "zoid" violates not-null constraint

Traceback (most recent call last):
  File "zodbpack.py", line 86, in <module>
    main()
  File "zodbpack.py", line 78, in main
    skip_prepack=options.reuse_prepack)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/storage.py", line 1114, in pack
    adapter.packundo.pre_pack(tid_int, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 486, in pre_pack
    conn, cursor, pack_tid, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 580, in _pre_pack_with_gc
    self.fill_object_refs(conn, cursor, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 387, in fill_object_refs
    self._add_refs_for_tid(cursor, tid, get_references)
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/packundo.py", line 459, in _add_refs_for_tid
    self.runner.run_script_stmt(cursor, stmt, {'tid': tid})
  File "/usr/local/lib64/python2.6/site-packages/RelStorage-1.5.1-py2.6.egg/relstorage/adapters/scriptrunner.py", line 52, in run_script_stmt
    cursor.execute(stmt, generic_params)
psycopg2.IntegrityError: null value in column "zoid" violates not-null constraint
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-06 12:15:37

在没有启用GC的情况下运行zodbpack.py (感谢Martijn)可以工作,并使数据库从3.8 GC压缩到887Mb。

所以我的zodbpack-conf.xml看起来像这样:

代码语言:javascript
复制
<relstorage>
  pack-gc false
  <postgresql>
    dsn dbname='zodb' user='user' host='host' password='password'
  </postgresql>
</relstorage>

我用以下命令运行它:

代码语言:javascript
复制
python zodbpack.py -d 7 zodbpack-conf.xml

注意:包完成后,您仍然需要清空数据库以收回空间。我从命令行运行此命令:

代码语言:javascript
复制
psql zodb postgresuser
zodb=# SELECT pg_database_size('zodb');
zodb=# vacuum full;
zodb=# SELECT pg_database_size('zodb');

有趣的是,当我从ZMI控制面板运行pack命令时,我仍然得到和以前一样的错误:

代码语言:javascript
复制
Site Error

An error was encountered while publishing this resource.

Error Type: IntegrityError
Error Value: null value in column "zoid" violates not-null constraint 

所以我假设ZMI包启用了GC,并且我的站点数据库中仍然存在空值的问题……

我是否应该尝试运行一些SQL来清除它?如果一个对象没有'zoid‘值,那么它实际上是不能访问的垃圾吗?这方面的SQL示例也会很棒:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13695766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档