在web2py应用程序中,我拥有一个主要的postgresql数据库( db1 ),并设置了一个单独的postgresql数据库(db1_archive),用于从db1归档几个表。此功能在模块中实现,具有以下功能:
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”字段有以下约束:
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代码,我可以试着解决这个问题吗?谢谢。
发布于 2013-10-16 05:37:57
您需要做的是构建约束名称的列表,然后在代码中遍历它们,然后:
alter table [tablename] drop constraint [fkeyname];如果需要从系统目录中提取这些信息,请参见pg_constraint表。
请注意,alter不能被参数化,因此您必须将命令组装成一个字符串,并进行适当的转义并运行它。
https://stackoverflow.com/questions/17027642
复制相似问题