簡體   English   中英

截斷postgres數據庫中的所有表

[英]Truncate all tables in postgres database

2010年5月,Aaron和Henning都提供了代碼來注冊一個函數,該函數稍后在使用“ username”的參數調用時將截斷所有表。 在Windows 7上,它在postgres上運行良好。不幸的是,在Ubuntu上,postgres 8.3都無法使用。

An error has occurred:
ERROR:  syntax error at or near "$1"
LINE 1:   $1 
          ^
QUERY:    $1 
CONTEXT:  SQL statement in PL/PgSQL function "truncate_tables" near line 6

我還嘗試通過刪除我在Windows中使用的復雜WHERE子句來簡化select語句,使其專注於BEGIN For子句。
您能在這里看到問題嗎? 謝謝。 檢索表名后是否無法通過或讀取表名? $ 1的問題不是表示找不到輸入嗎?

DECLARE 
    stmt RECORD;  
    statements CURSOR FOR  
    SELECT tablename FROM pg_tables  
    WHERE  tablename !~* 'sql_*' and tablename !~* 'pg_*' and tablename !~* 'schema_*';  
BEGIN  
    FOR stmt IN statements LOOP  
        EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;';  
    END LOOP;  
END;                           

似乎某些函數語法在版本8.3和8.4之間發生了變化。 嘗試這個:

CREATE OR REPLACE FUNCTION public.truncate_tables(username IN VARCHAR) RETURNS void AS $$
DECLARE
    stmt RECORD;
BEGIN
    FOR stmt IN SELECT tablename FROM pg_tables
        WHERE tableowner = username AND schemaname = 'public' LOOP
        execute 'TRUNCATE TABLE public.' || quote_ident(stmt.tablename) ||';';
    END LOOP;
END;
$$ LANGUAGE plpgsql;

暫無
暫無

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

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