2015-08-19 3 views
0

Я ненавижу просить о маленьких глупых ошибок, как это, но я не могу понять это для жизни меня ...INSERT INTO Postgres не работает

Этот запрос:

INSERT INTO user_authentication(init_password_setup) VALUES(substr((md5(random()::TEXT)), 0, 10)) WHERE (init_password_setup = NULL OR init_password_setup ='') 

бросает эта ошибка:

16:27:11 Kernel error: ERROR: syntax error at or near "WHERE" 

Я попытался запустить его как выбор вставки. Искренне благодарим за любую помощь с благодарностью

+0

Извините, ребята. очень тупой. не уверен, что я думал. в конце дня. Спасибо за быструю помощь. – ambe5960

ответ

1

insert заявление не имеет where статья. Либо вставьте новые данные или обновите существующие данные с помощью предложения update (которое может иметь предложение where).

+0

'INSERT INTO ... SELECT ... WHERE' отлично. Проблема в том, что вы не можете использовать предложение 'WHERE' в set-expression' VALUES'. Тем не менее, я согласен с тем, что пользователь выглядит смущенным и, кажется, пытается использовать 'INSERT' для' UPDATE' строки. –

1

Вы не можете сделать INSERT с предложением WHERE. Если вы пытаетесь ввести INSERT, просто используйте VALUES. Если вы хотите использовать, где использовать UPDATE.

+0

Это ошибка по тем же причинам, что и ответ @ jurgend –

3

Если вы хотите изменить уже существующую строку, вам нужен оператор UPDATE, а не оператор INSERT.

Обновление изменит существующие строки (строки), Insert добавит новую строку в таблицу.

UPDATE user_authentication 
    SET init_password_setup = substr((md5(random()::TEXT)), 0, 10) 
WHERE init_password_setup IS NULL 
    OR init_password_setup ='' 
3

В инструкции INSERT нет предложения WHERE. Но вы можете использовать INSERT ... SELECT заявление:

INSERT INTO user_authentication (user_id, init_password_setup) 
    SELECT id, substr((md5(random()::TEXT)), 0, 10) 
    FROM users 
    WHERE <some condition here>; 

или просто обновление существовали записи:

UPDATE user_authentication 
SET init_password_setup = substr((md5(random()::TEXT)), 0, 10) 
WHERE init_password_setup IS NULL OR init_password_setup =''; 
Смежные вопросы