我不知道这个问题更适合这里还是 SO ...
这是我想启动的脚本(函数的代码是从 SO 上的问题复制的):
\c mydb
create or replace function truncate_tables(username in varchar) returns void as $$
declare
stmt RECORD;
statements cursor for select tablename from pg_tables where tableowner = username;
begin
for stmt in statements loop
execute 'truncate table ' || quote_ident(stmt.tablename) || ' CASCADE ;';
end loop;
end;
$$ language 'plpgsql';
我收到以下错误:
ERROR: syntax at or near "$1" LINE1: $1
QUERY $1
CONTEXT: SQL statement in PL/PgSQL function "truncate_tables" near line 5
我是 Postgres 和 PL/pgSQL 的新手,不知道这个错误信息是什么意思。
这个特定的例子可以更简单。
您可以
TRUNCATE
一次创建多个表。聚合所有表名并执行单个语句:称呼:
string_agg()
需要 PostgreSQL 9.0或更高版本。在 8.4 中,您可以替换:
对于 v8.3,您可以编写自己的聚合函数——相当简单,但并不比循环解决方案简单。
在 PostgreSQL 9.1 中一次删除或截断多个表时性能会下降。在即将发布的 9.2 版本中对此进行了修复。我引用发行说明:
pgsql-hackers 上的相关主题。
@Craig 在 SO 的相关回答帮助我发现了这一点。
尝试放弃显式光标: