2016-05-18 29 views

回答

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 ....存在,它不会做任何事情。

但这取决于你想要达到的目标。

+0

这个想法是:如果第一个表已经存在,则不需要运行整个脚本。这只是做最简单和最快的数据库初始化。 –

1

PostgreSQL数据库在apparted进程中运行每个查询。你需要找出进程号码。我用pg_activity,但你可以运行:

SELECT datname,procpid,current_query FROM pg_stat_activity; 

一旦你找到了,你可以杀了它在外壳的PID:

kill $PID #or 
kill -9 $PID 
+0

这是很棒的信息,但不能在SQL脚本里面,可以吗? –

+1

你不需要在命令行'pg_cancel_backend()'(甚至是'pg_terminate_backend()')上执行kill就可以做同样的事情 –

+0

并且请不要公布'kill -KILL' – wildplasser