postgresql 筆記

l1xnan發表於2018-04-26

資訊模式

table_constraints

檢視table_constraints包含屬於特定表的所有約束,這些表要滿足的條件是:當前使用者擁有表或者是當前使用者在表上具有某種除SELECT之外的特權。

SELECT * FROM information_schema.table_constraints;

constraint_table_usage

檢視constraint_table_usage標識在當前資料庫中被某個約束使用的所有表(這與檢視table_constraints不同,它標識哪些表約束定義在哪些表上)。對於一個外來鍵約束,這個檢視標識該外來鍵引用的表。對於一個唯一或主鍵約束,這個檢視僅標識該約束屬於的表。檢查約束和非空約束不被包括在這個檢視中。

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)

參見:資訊模式

相關文章