Postgresql 截断postgres数据库中的所有表

Postgresql 截断postgres数据库中的所有表,postgresql,Postgresql,2010年5月,Aaron和Henning都提供了注册一个函数的代码,当稍后使用“username”参数调用该函数时,将截断所有表。它在Windows7上与postgres配合得很好。不幸的是,对于Ubuntu上的postgres 8.3,这两个版本都不起作用 An error has occurred: ERROR: syntax error at or near "$1" LINE 1: $1 ^ QUERY: $1 CONTEXT: SQL state

2010年5月,Aaron和Henning都提供了注册一个函数的代码,当稍后使用“username”参数调用该函数时,将截断所有表。它在Windows7上与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
我还尝试简化select语句,以关注BEGIN For子句, 删除我在Windows中使用的复杂WHERE子句。
你能看到这里的问题吗?谢谢 检索表名后是否无法传递或读取?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;

似乎有些函数语法在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;

请向我们展示函数$1的完整源代码,因为它没有出现在引用的部分函数中,所以您删除了关键信息。请提供完整的功能创建;请向我们展示函数$1的完整源代码,因为它没有出现在引用的部分函数中,所以您删除了关键信息。请提供完整的功能创建;