2016-06-08 4 views
1

Я пытаюсь создать интерфейс забытого пароля с помощью узла и машинописи. Я хочу вставить забытый токен пароля в базу данных забытых паролей, и я использую следующий запрос, чтобы это сделать. В основном я использую Guid в качестве маркеров и пытаюсь ссылаться на мои человек, вечеринку и contact_details столовPostgres Inner join insert in and select from syntax

INSERT INTO 
dbo.forgot_password_tokens 
    SELECT 
    'random_guid' as forgot_password_tokens_id, 
    current_timestamp as updated_at, 
    cd.contact_details_id, 
    u.users_id 
     FROM 
      dbo.users as u 
      inner join dbo.people as pe on pe.people_id = u.people_id   
      inner join dbo.parties as pa on pa.parties_id = pa.parties_id 
      inner join dbo.contact_details as cd on 
       cd.parties_id = pa.parties_id 
       and cd.value = '[email protected]' 
       and cd.contact_details_types_id in ('guid_for_email', 'guid_for_second_email') 

Это ошибка, я получаю

ERROR: column "updated_at" is of type timestamp with time zone but expression is of type uuid 

LINE 6: cd.contact_details_id, 

Я не уверен, почему он говорит, что updated_at получает неверные данные, я думал, что current_timestamp поставит его в нужное место

ответ

4

Порядок столбцов в целевой таблице, вероятно, не соответствует порядку столбцов в выбранном вами. Это очень хороший пример того, почему вы должны всегда указать список столбцов в insert заявления:

INSERT INTO dbo.forgot_password_tokens 
    (forgot_password_tokens_id, updated_at, contact_details_id, users_id) 
SELECT ... 
FROM ... 
+0

работает как шарм, спасибо –