2017-08-05 10 views
0

PostgreSQLを使用したSQLの新機能。作成したテーブルを手作業で削除することなくクエリを実行する

初心者にはいくつか問題がありますが、問題があります。物事をテストし、私はそうで

CREATE TABLE x(...); 

... 

run query.. 

CREATE TABLE x(...); 

CREATE TABLE y(...); 

run query 

すなわちステップでクエリを記述---としていながら、私は未知のエラーに遭遇していないことを確認する 。

問題は、私はテーブルを作成した後、私は試してみて、もう一度クエリを実行したい場合は、私がそうでなければ、私は

'ERROR: relation "x" already exists.'

は些細な問題のように思える取得、それを削除しなければならない、ですが、周りを探した後、 stackoverflow、google、postgreのウェブサイトで、私は何も見つかりませんでした。

答えて

1

必要に応じてテーブルが存在する場合は削除するか、存在しない場合はテーブルを作成することができます。

DROP TABLE IF EXISTS tableName ...

CREATE TABLE IF NOT EXISTS tableName ...

creating a tableまたはdropping a tableためdocumenationをチェックしてください。

+0

テーブルの1つで何かを変更したとしますが、それでも削除されますか?それともそれを「新しい」テーブルとして読むのでしょうか? – Immanuel

+0

@Immanuelテーブルをドロップすると、すべてが削除されます。しかし、すでに存在する新しいテーブルを作成すると、テーブルに行が追加され、既存のすべてのデータがそのまま残ります。 – Matthew

+0

だから私は 'IF NOT EXISTS'を使って各テーブルを作成する必要がありますか? 「包括的」なんて何かありますか? – Immanuel

0

実際に練習中で、データが重要でない場合は、TEMPORARYテーブルを使用できます。次に、簡単な接続解除と再接続により、それらがスローされ、きれいなスレートが与えられます。

CREATE TEMPORARY TABLE x(...); 

それともあなたもコミットやロールバックの上にドロップされたトランザクション・スコープの一時テーブルを、使用することができます。

BEGIN; 

CREATE TEMPORARY TABLE x(...) ON COMMIT DROP; 

INSERT ... 

COMMIT; 

あるいは、もちろん、あなただけの取引であなたの反復的な開発を行うことができます最後にROLLBACK

+0

私は別の 'エラーを取得します:永久テーブル ' – Immanuel

+0

@Immanuelあなたはテスト中のすべての一時テーブル、または永久テーブルをすべて使用する必要があります。永続テーブルから一時テーブルへの外部キー制約を持つことはできません。 –

1

パフォーマンスの理由などがある場合を除いて、テンポラリテーブルは使用しないでください。

代わりに共通テーブル式(CTEを)使用します。

with x as (
     <code here> 
    ), 
    y as (
     <code here> 
    ), 
    . . . 
select . . . 

のCTEは、クエリの一部であるので、彼らは、クエリの実行の間で保持されません。 Voila!命名テーブルや一時テーブルに問題はありません。

関連する問題