在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中。但是,删除后,会生成以下psycopg2.IntegrityError:
表“archive_table1”上的插入或更新违反 外键约束“archive_table1_created_by_fkey”DETAIL:Key(created_by)=(9)是>表“auth_user”中没有出现
我想发生的事情是归档数据库没有找到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代码,我可以尝试解决这个问题?感谢。
答案 0 :(得分:1)
您需要做的是构建约束名称列表,然后在代码中遍历它们:
alter table [tablename] drop constraint [fkeyname];
如果您需要从系统目录中提取此信息,请参阅pg_constraint
表。
请注意,alter table无法参数化,因此您必须将该命令组合为具有正确转义的字符串并运行它。