簡體   English   中英

Web2py-使用單獨的SQL數據庫進行歸檔時的密鑰/約束問題

[英]Web2py - Key/constraint issue when using separate SQL database for archiving

在一個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”詳細信息:表(auth_user)中不存在鍵(created_by)=(9)

我猜發生了什么事,就是歸檔數據庫找不到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代碼上為我提供建議,我可以嘗試解決此問題? 謝謝。

您需要做的是建立一個約束名稱列表,然后在代碼中遍歷它們,並:

alter table [tablename] drop constraint [fkeyname];

如果您需要從系統目錄中獲取此信息,請參見pg_constraint表。

請注意,不能對alter table進行參數化,因此您必須將命令匯編為帶有適當轉義符的字符串,然后運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM