Python 数据库备份错误

Python 数据库备份错误,python,unix,ckan,paster,Python,Unix,Ckan,Paster,我已计划使用cron备份位于远程UNIX设备上的CKAN数据库。我运行了一个简单的脚本,代码如下: . /usr/lib/ckan/default/bin/activate cd /usr/lib/ckan/default/src/ckan paster db dump --config=/etc/ckan/default/production.ini /home/gisadmin/CKAN_backup_tmp.pg 当我手动运行脚本时,它总是成功的。但是,cron作业有时会成功运行,有时

我已计划使用cron备份位于远程UNIX设备上的CKAN数据库。我运行了一个简单的脚本,代码如下:

. /usr/lib/ckan/default/bin/activate
cd /usr/lib/ckan/default/src/ckan

paster db dump --config=/etc/ckan/default/production.ini /home/gisadmin/CKAN_backup_tmp.pg
当我手动运行脚本时,它总是成功的。但是,cron作业有时会成功运行,有时会失败,并显示以下错误消息。为了测试这一点,我将作业安排为每小时运行一次,它成功了大约一半的时间,但我看不到任何实际的模式

Traceback (most recent call last):
  File "/usr/lib/ckan/default/bin/paster", line 9, in <module>
    load_entry_point('PasteScript==1.7.5', 'console_scripts', 'paster')()
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/paste/script/command.py", line 104, in run
    invoke(command, command_name, options, args[1:])
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/paste/script/command.py", line 143, in invoke
    exit_code = runner.run(args)
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/paste/script/command.py", line 238, in run
    result = self.command()
  File "/usr/lib/ckan/default/src/ckan/ckan/lib/cli.py", line 141, in command
    self._load_config()
  File "/usr/lib/ckan/default/src/ckan/ckan/lib/cli.py", line 96, in _load_config
    load_environment(conf.global_conf, conf.local_conf)
  File "/usr/lib/ckan/default/src/ckan/ckan/config/environment.py", line 232, in load_environment
    p.load_all(config)
  File "/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py", line 134, in load_all
    load(*plugins)
  File "/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py", line 167, in load
    plugins_update()
  File "/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py", line 116, in plugins_update
    environment.update_config()
  File "/usr/lib/ckan/default/src/ckan/ckan/config/environment.py", line 357, in update_config
    plugin.configure(config)
  File "/usr/lib/ckan/default/src/ckan/ckanext/datastore/plugin.py", line 77, in configure
    self._check_urls_and_permissions()
  File "/usr/lib/ckan/default/src/ckan/ckanext/datastore/plugin.py", line 121, in _check_urls_and_permissions
    if not self._read_connection_has_correct_privileges():
  File "/usr/lib/ckan/default/src/ckan/ckanext/datastore/plugin.py", line 164, in _read_connection_has_correct_privileges
    write_connection.execute(u'CREATE TABLE _foo ()')
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1449, in execute
    params)
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1628, in _execute_text
    statement, parameters
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1698, in _execute_context
    context)
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1691, in _execute_context
    context)
  File "/usr/lib/ckan/default/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 331, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (IntegrityError) duplicate key value violates unique constraint "pg_type_typname_nsp_index"
DETAIL:  Key (typname, typnamespace)=(_foo, 2200) already exists.
 'CREATE TABLE _foo ()' {}
回溯(最近一次呼叫最后一次):
文件“/usr/lib/ckan/default/bin/paster”,第9行,在
加载输入点('PasteScript==1.7.5','console_脚本','paster')()
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/paste/script/command.py”,第104行,正在运行
调用(命令、命令名、选项、参数[1:])
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/paste/script/command.py”,第143行,在invoke中
退出代码=runner.run(args)
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/paste/script/command.py”,第238行,正在运行
结果=self.command()
命令中第141行的文件“/usr/lib/ckan/default/src/ckan/ckan/lib/cli.py”
self._load_config()
文件“/usr/lib/ckan/default/src/ckan/ckan/lib/cli.py”,第96行,在加载配置中
加载环境(conf.global\u conf,conf.local\u conf)
文件“/usr/lib/ckan/default/src/ckan/ckan/config/environment.py”,第232行,在load\u环境中
p、 加载所有(配置)
文件“/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”,第134行,全部加载
加载(*插件)
加载文件“/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”,第167行
插件更新()
文件“/usr/lib/ckan/default/src/ckan/ckan/plugins/core.py”,第116行,插件更新
environment.update_config()
更新配置中的文件“/usr/lib/ckan/default/src/ckan/ckan/config/environment.py”,第357行
plugin.configure(配置)
文件“/usr/lib/ckan/default/src/ckan/ckanext/datastore/plugin.py”,第77行,在configure中
self.\u检查\u URL\u和\u权限()
文件“/usr/lib/ckan/default/src/ckan/ckanext/datastore/plugin.py”,第121行,在检查URL和权限中
如果不是self.\u读取\u连接\u具有\u正确的\u权限():
文件“/usr/lib/ckan/default/src/ckan/ckanext/datastore/plugin.py”,第164行,在读取连接中具有正确的权限
write_connection.execute(u'createtable_foo()'))
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/sqlalchemy/engine/base.py”,第1449行,在execute中
参数)
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/sqlalchemy/engine/base.py”,第1628行,文本为
语句、参数
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/sqlalchemy/engine/base.py”,第1698行,在执行上下文中
(上下文)
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/sqlalchemy/engine/base.py”,第1691行,在执行上下文中
(上下文)
文件“/usr/lib/ckan/default/local/lib/python2.7/site packages/sqlalchemy/engine/default.py”,第331行,在do_execute中
cursor.execute(语句、参数)
sqlalchemy.exc.IntegrityError:(IntegrityError)重复键值违反唯一约束“pg\u type\u typname\u nsp\u index”
详细信息:键(typname,typnespace)=(_-foo,2200)已存在。
'创建表_foo()'{}
非常感谢您的帮助


谢谢。

我认为这是数据存储代码中的一个错误。如果在运行备份之前禁用数据存储插件,则不会发生这种情况。例如,您可以创建一个与数据存储插件完全相同的
production.ini
文件副本,并将其用于
paster db dump
命令

或者,您可以直接使用PostgreSQL的
pg_dump
命令

请注意,备份CKAN站点时,有几件事需要备份:

  • CKAN的默认“catalog”数据库,
    paster db dump
    命令或
    pg_dump
    将获得此信息
  • 数据存储数据库,我不认为
    paster db dump
    会得到这个,但它应该可以通过
    pg_dump
    实现
  • 文件存储的存储目录的内容(如果正在使用)
    rsync
    将是一种简单的备份方法
  • 您的配置文件