首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web2py -使用单独的SQL数据库存档时的键/约束问题

Web2py -使用单独的SQL数据库存档时的键/约束问题
EN

Stack Overflow用户
提问于 2013-06-10 15:38:00
回答 1查看 472关注 0票数 1

在web2py应用程序中,我拥有一个主要的postgresql数据库( db1 ),并设置了一个单独的postgresql数据库(db1_archive),用于从db1归档几个表。此功能在模块中实现,具有以下功能:

代码语言:javascript
复制
class db_archives():

    def __init__(self, request, response, db1_archive, db1, auth):

        ...

        auth.enable_record_versioning(
            archive_db = db1_archive,
            tables = [db1.auth_user, db1.table1, db1.table2, ...]
            archive_names='archive_%(tablename)s'
            )

当从db1中的相关表中删除某些内容时,应该在db1_archive中自动归档。但是,删除后,将生成以下心理Copg2. instead:

表"archive_table1“上插入或更新违反外键约束"archive_table1_created_by_fkey”的详细信息: key (created_by)=(9) >不在表"auth_user“中

我猜发生的情况是归档DB找不到ID为9的用户。“created_by”字段有以下约束:

代码语言:javascript
复制
FOREIGN KEY (created_by) REFERENCES auth_user(id) ON DELETE CASCADE

我想从归档数据库中删除所有约束。我认为这可以用web2py的[database_name].executesql()函数来完成。但是,我尝试了一些东西,比如db1_archive.executesql('SET FOREIGN_KEY_CHECKS=0;'),最后只得到了错误消息。有人能告诉我一些SQL或web2py代码,我可以试着解决这个问题吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-16 05:37:57

您需要做的是构建约束名称的列表,然后在代码中遍历它们,然后:

代码语言:javascript
复制
alter table [tablename] drop constraint [fkeyname];

如果需要从系统目录中提取这些信息,请参见pg_constraint表。

请注意,alter不能被参数化,因此您必须将命令组装成一个字符串,并进行适当的转义并运行它。

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

https://stackoverflow.com/questions/17027642

复制
相关文章

相似问题

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