Não sei se essa pergunta se encaixa melhor aqui ou em SO...
Este é um script que gostaria de iniciar (o código da função foi copiado de uma pergunta no 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';
Estou tendo o erro a seguir:
ERROR: syntax at or near "$1" LINE1: $1
QUERY $1
CONTEXT: SQL statement in PL/PgSQL function "truncate_tables" near line 5
Sou novo em Postgres e PL/pgSQL e não sei o que essa mensagem de erro significa.
Este exemplo particular pode ser mais simples.
Você pode
TRUNCATE
várias tabelas ao mesmo tempo. Agregue todos os nomes de tabelas e execute uma única instrução:Ligar:
string_agg()
requer PostgreSQL 9.0 ou posterior.Em 8.4 você pode substituir:
Para a versão 8.3, você escreveria sua própria função de agregação - bastante simples, mas não mais simples do que a solução de loop.
O desempenho diminui ao excluir ou truncar muitas tabelas de uma vez no PostgreSQL 9.1. Uma correção para isso na próxima versão 9.2. Cito as notas de lançamento :
Tópico relacionado em pgsql-hackers.
A resposta relacionada de @Craig no SO me ajudou a descobrir isso.
Tente dispensar o cursor explícito: