2016-06-17 15 views
-1

存在する場合にのみ、列を追加します。表がない私は、テーブル内の列を作成してい

client.query("ALTER TABLE mytable ADD theField text", function(err, result) { 

は今、私は列がすでに存在する場合は、ステートメントを実行していないので、テストを実行したいです。

私が試した:

client.query("ALTER TABLE mytable IF NOT EXISTS ADD theField text", function(err, result) { 


client.query("ALTER TABLE mytable ADD theField text IF NOT EXISTS", function(err, result) { 


client.query("ALTER TABLE mytable WHERE EXISTS (SELECT 1 FROM mytable ADD theField text)", function(err, result) { 

が、すべての与え構文エラーが。

答えて

1

コードALTER TABLE mytable IF NOT EXISTS ADD theField textは、thefieldの列を追加します。 theFieldと正確に呼びたい場合は、ALTER TABLE mytable IF NOT EXISTS ADD "theField" text のように大文字小文字を無視して列が存在するかどうかをチェックする理由があります。lower(blaH-BLah)lower(blAh-bLAh)と等しいので、blah-bLahという値になります。これはあなたのクエリが次のようになる理由です:

client.query("do"+ 

    " $$"+ 
    "begin"+ 
    " if (select count(*) from information_schema.columns" + 
     "  where table_schema = 'public' " + 
     " and table_name = 'mytable' "+ 
     " and lower(column_name) = lower('theField')) < 1 " + 
     " then "+ 
     "ALTER TABLE mytable ADD \"theField\" text;"+ 
     "end if;"+ 
    "end;"+ 
    "$$"+ 
    ";", function(err, result) { 
+0

「myschema」とは何ですか? – George

+0

テーブルを持っているスキーマ名 –

+0

どこにも指定していない場合は公開する必要があります –

関連する問題