gpt4 book ai didi

postgresql - 截断 postgres 数据库中的所有表

转载 作者:行者123 更新时间:2023-11-29 13:37:29 45 4
gpt4 key购买 nike

2010 年 5 月,Aaron 和 Henning 都提供了代码来注册一个函数,稍后使用“用户名”的参数调用该函数时将截断所有表。它在 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

我还尝试过简化 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) ||' CASCADE;';
END LOOP;
END;
$$ LANGUAGE plpgsql;

关于postgresql - 截断 postgres 数据库中的所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782813/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com