Подход, который вы принимаете, неверен. Это не будет работать. Стоп.
Go прочитать руководство по upserts:
, а затем использовать один из правильных методов документированных там, либо блокировки таблицы и делать upsert, или делать это в цикле повторов.
Чтобы понять, почему ваш нынешний подход неверен, подумайте о том, что происходит, когда два человека выполняют одну и ту же команду одновременно.
- person1:
select * from waiter
- PERSON2:
select * from waiter
- PERSON1:
if exist(...)
=> ложно, Неа, не существует
- PERSON2:
if exist(...)
=> ложно, Неа, не существует
- person1:
insert...
- PERSON2:
insert...
и стрела, у вас есть две записи.
(Этот подход также ужасно неэффективен - SELECT * FROM WAITER
просто ужасно).
Вот почему каждый дает вам ссылки на статьи и документацию, показывающие, как это сделать правильно. Вы пытаетесь решить неправильную проблему.Вы действительно говорите: «Когда я завожу свой автомобиль на перекрестке, не глядя на светофоры, как узнать, есть ли кто-нибудь еще?». Мы говорим: «Э, не делай этого. Посмотри на светофоры».
Только один раз, когда у вас есть фактическое upsert («create if not exists»), правильная работа, , затем беспокоиться о том, как с этим бороться с node.js.
Я бы сказал, что это будет как и любой другой запрос. В любом случае: запустите запрос/команду, получите идентификатор (существующий или вновь созданный) в результате запроса, используйте ID, но вы хотите. Если вам нужна дополнительная помощь с этой частью, попробуйте опубликовать конкретный вопрос node.js только на этой части, без всякого беспорядочного беспорядка с кодом-upsert-кодом, чтобы выбросить всех из-под контроля. Учтите, что многие из тегов postgresql много не знают о node.js.
Какая СУБД вы используете? Postgres? Oracle? –
@a_horse_with_no_name postgres – user3192435
[* Подзапрос оценивается для определения того, возвращает ли он любые строки. Если он возвращает хотя бы одну строку, результатом EXISTS является «true»; если подзапрос не возвращает строк, результат EXISTS является «ложным». *] (http://www.postgresql.org/docs/current/static/functions-subquery.html) –