2016-05-18 7 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

アイデアは:あります最初のテーブルがすでに存在する場合は、スクリプト全体を実行する必要はありません。これは、最も単純で素早いdbの初期化だけです。 –

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

関連する問題