PostgreSQL中有DDL脚本可以创建表。
例如,如果存在第一个表, 如何停止PostgreSQL的SQL脚本执行(在脚本中)?
答案 0 :(得分:1)
PostgreSQL数据库在apparted进程中运行每个查询。您需要找到进程号。我使用pg_activity,但你可以运行:
SELECT datname,procpid,current_query FROM pg_stat_activity;
一旦找到了PID,就可以在shell中杀死它:
kill $PID #or
kill -9 $PID
答案 1 :(得分:1)
如果要根据条件中止脚本,可以使用引发错误的DO
块来执行该操作:
do
$$
declare
l_count integer;
begin
select count(*)
into l_count
from information_schema.tables
where table_name = 'foobar'
and table_schema = 'public';
if (l_count > 0) then
raise exception 'Table foobar already exists!';
end if;
end;
$$
这要求您的SQL客户端在发生错误时将中止脚本。
另一种选择是更改您的脚本,以便在使用create table if not exists ....
表已存在时,它不会执行任何操作。
但这取决于你想要达到的目的。
答案 2 :(得分:0)
您可以执行以下操作:
SELECT 'Step 1' as step;
DO $$
BEGIN
assert (SELECT 'B'::text) = 'A'::text, 'Expected A';
END;
$$;
SELECT 'Step 2' as step;
返回:
ERROR: Expected A
CONTEXT: PL/pgSQL function inline_code_block line 3 at ASSERT
SQL state: P0004
显然,您可以使用任何类型来将assert与(而不只是文本)进行比较。