[英]Postgres: delete all tables or cascade a delete?
是否可以使用postgres中的單個命令刪除所有表中的所有行(不破壞數據庫),或者在postgres中級聯刪除?
如果沒有,那么如何重置我的測試數據庫?
是否可以使用postgres中的單個命令刪除所有表中的所有行
你是對的,答案是肯定的
您可以定義級聯外鍵,如果刪除“父級”,將刪除所有引用行。 但這是外鍵的屬性,您無法使用DELETE語句指定任何內容
如果不是 - 哇。
那是什么意思?
第二個想法:你想要實現什么?
我懷疑你正試圖“重置”例如測試數據庫。 在這種情況下,PostgreSQL方法將是:
DROP DATABASE testdb
,然后使用CREATE DATABASE testdb TEMPLATE my_template
重新創建測試數據庫CREATE DATABASE testdb TEMPLATE my_template
新創建的testdb將在my_template中定義所有表。 這也許不是刪除所有行快了很多 。
您可以編寫一個存儲過程來選擇所有模式中的所有表,然后對這些表執行DELETE CASCADE或TRUNCATE。 它只是幾行pl / pgsql代碼,沒什么大不了的。
編輯:這將成功,但要小心! :
CREATE OR REPLACE FUNCTION truncate_all() RETURNS void LANGUAGE plpgsql AS
$$
DECLARE
row record;
query text;
BEGIN
query := 'SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN(''pg_catalog'', ''information_schema'') AND table_type = ''BASE TABLE''';
FOR row IN EXECUTE query LOOP
EXECUTE 'TRUNCATE ' || quote_ident(row.table_schema) || '.' || quote_ident(row.table_name) || ' CASCADE;';
END LOOP;
RETURN;
END;
$$;
-- execute:
SELECT truncate_all();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.