如何停止PostgreSQL的SQL脚本执行?

时间:2016-05-18 12:18:05

标签: sql postgresql

PostgreSQL中有DDL脚本可以创建表。

例如,如果存在第一个表, 如何停止PostgreSQL的SQL脚本执行(在脚本中)?

3 个答案:

答案 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与(而不只是文本)进行比较。