postgresql 筆記

信息模式

table_constraints

視圖table_constraints包含屬於特定表的全部約束,這些表要知足的條件是:當前用戶擁有表或者是當前用戶在表上具備某種除SELECT以外的特權。html

SELECT * FROM information_schema.table_constraints;

constraint_table_usage

視圖constraint_table_usage標識在當前數據庫中被某個約束使用的全部表(這與視圖table_constraints不一樣,它標識哪些表約束定義在哪些表上)。對於一個外鍵約束,這個視圖標識該外鍵引用的表。對於一個惟一或主鍵約束,這個視圖僅標識該約束屬於的表。檢查約束和非空約束不被包括在這個視圖中。python

SELECT * FROM information_schema.constraint_table_usage;

批量刪除外鍵

# sqlalchemy session
query = session.execute(
    "SELECT * FROM information_schema.table_constraints WHERE constraint_type =:param;",
    {'param': 'FOREIGN KEY'})
results = query.fetchall()

for r in results:
    table_name = r['table_name']
    constraint_name = r['constraint_name']
    try:
        session.execute(f"ALTER TABLE {table_name} DROP CONSTRAINT {constraint_name};")
        print('成功:', table_name, constraint_name)
    except:
        print('失敗:', table_name, constraint_name)

參見:信息模式sql

相關文章
相關標籤/搜索