2016-06-17 4 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

, если вы не указали ее нигде - должны быть общедоступны –

Смежные вопросы