|
2.28, zero (??), 10:54, 10/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
упс
тебе погло бы:
select ...
if found then
update ...
else
insert ...
end
| |
|
3.30, wulf (ok), 14:13, 10/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
Есть более быстрый способ:
update
if число проапдейченых строк = 0
insert
end
| |
|
4.38, Roman (??), 02:56, 11/05/2015 [^] [^^] [^^^] [ответить]
| +1 +/– |
> update
> if число проапдейченых строк = 0
та же проблема, в то время как работает if, может быть инсерт в параллельной транзакции
| |
4.43, Led (ok), 23:33, 11/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
> Есть более быстрый способ:
> update
> if число проапдейченых строк = 0
> insert
> end
Ага, особенно весело, если после "update" и перед "insert" таки появится необходимая запись для "update":)
| |
|
3.37, Roman (??), 02:52, 11/05/2015 [^] [^^] [^^^] [ответить]
| +1 +/– |
>> select ...
>> if found then
а если между select и insert параллельная транзакция проинсертит?
| |
|
4.46, zero (??), 15:06, 24/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
>>> select ...
>>> if found then
> а если между select и insert параллельная транзакция проинсертит?
Если руки из ... Если логика кривая, то ни одна команда не поможет. Транзакции изолированны и вы в любом случаи словите дубл. на коммит. Так что ваш пример в природе в диком виде не водиться, вымирает.
| |
4.47, fi (ok), 13:56, 26/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
>>> select ...
>>> if found then
> а если между select и insert параллельная транзакция проинсертит?
'select … for update' никто не отменял!
| |
|
|
|
|
2.6, Аноним (-), 05:20, 09/05/2015 [^] [^^] [^^^] [ответить]
| –2 +/– |
Жиреет кадаврик. Скоро тоже станет средой программирования по типу оракла.
| |
|
3.11, kurokaze (ok), 12:37, 09/05/2015 [^] [^^] [^^^] [ответить]
| +2 +/– |
С разморозкой. На том же перле уже много лет можно функции для постгри писать
| |
|
|
|
2.4, vitalif (ok), 23:50, 08/05/2015 [^] [^^] [^^^] [ответить]
| +3 +/– |
Каким образом, если не секрет? Они только сегодня закоммитили в 9.5-devel. Реально ДЕНЬ ПОБЕДЫ )))) а ты на патченой сборке сидишь что ли?
| |
|
1.5, Xasd (ok), 00:52, 09/05/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
полезно!
"добавить-или-модифицировать" это действительно должна быть именно одна команда. очень частый сценарий использования
| |
|
2.9, vitalif (ok), 10:49, 09/05/2015 [^] [^^] [^^^] [ответить]
| +3 +/– |
Это практически то же самое что INSERT ON DUPLICATE KEY UPDATE в MySQL.
REPLACE удаляет старые строки и вставляет их заново, а INSERT ODKU именно обновляет существующие.
Плюс в постгресовской реализации можно указывать конкретный ключ, по которому должен произойти конфликт, что полезно, т.к. предохраняет от сюрпризов, если совпадёт какой-то другой уникальный ключ, кроме первичного :-)
| |
2.13, Аноним (-), 14:26, 09/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
on conflict ignore = insert ignore
on conflict update = insert on duplicate key update
| |
|
1.16, Аноним (-), 16:19, 09/05/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
Мне нравится как апсерт (update or insert) в файрберде реализован, синтаксис логичнее и проще запомнить. Merge в оракле тоже логичен. А тут - какой-то кривоватый синтаксис.
| |
|
|
3.33, Аноним (-), 15:35, 10/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
Ну, в Oracle я connect by prior использую иногда (в нашей базе есть филиалы, в каждом филиале есть подразделения, т.е. древовидная система, там есть у каждого подразделения первичный ключ и parent id (первичный ключ родительского подразделения), а так больше особо и не нахожу им применения, у нс нет больше данных, которые в виде дерева представлять удобно :)
| |
3.34, Аноним (-), 15:39, 10/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
> Гельфи-погроммисты в треде.
Я просто про синтаксис свое мнение высказал, в нормальные реализации апсертов минимум новых ключевых слов добавлено, ибо это просто синтаксический сахар, потому что это легко реализовать через выборку и проверку на количество возвращенных запросом строк, а тут целое новое предложение.
| |
|
4.40, Аноним (-), 03:09, 11/05/2015 [^] [^^] [^^^] [ответить]
| +1 +/– |
Выборка и проверка не атомарны, между ними может вклиниться insert из параллельной транзакции, кроме того это медленно, так что ON CONFLICT рулит. А по поводу иерархии, наверное вы не пользуете ее в постгресе, многословность ON CONFLICTа по сравнению с ней что ландыши на куче навоза)
| |
|
|
|
1.21, Пафнутий Корнегрызов (?), 00:02, 10/05/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Дорогие любители постгресов, порекомендуйте срафниватель схем, пожалуйста. Чтобы изменения в девелоперской базе выложить в продакшн. Заранее, спасибо
| |
|
2.23, Аноним (-), 00:44, 10/05/2015 [^] [^^] [^^^] [ответить]
| –2 +/– |
> Дорогие любители постгресов, порекомендуйте срафниватель схем, пожалуйста. Чтобы изменения
> в девелоперской базе выложить в продакшн. Заранее, спасибо
pg_dump + "vim -d"
| |
|
3.24, Пафнутий Корнегрызов (?), 03:22, 10/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
> pg_dump + "vim -d"
Не, спасибо. Это не годится. Не хочу так прос... водить свою молодость. У куда менее продуманных СУБД есть отличные тулзы для сравнения схем, должно быть что-то и у постгреса. Пока только apgdiff нашёл из нормального, но он хочет яву и не поддерживает сравнение типов и вообще заброшен два года назад :-(
| |
|
4.29, Здравый (?), 13:25, 10/05/2015 [^] [^^] [^^^] [ответить]
| –2 +/– |
>У куда менее продуманных СУБД есть отличные тулзы для сравнения схем
Или плати, мажорик-хотельщик, или же сиди под Emacs, VIM. А то все райской жизни ищут. Ишь, поперли погромисты.
| |
|
|
2.32, Аноним (-), 15:11, 10/05/2015 [^] [^^] [^^^] [ответить]
| –1 +/– |
В 9-ке вроде information scheme появилась. Просто ее содержимое запихивать в svn кроном а потом разглядывать дифы svn-ом не подходит?
| |
|
3.36, Пафнутий Корнегрызов (?), 01:54, 11/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
Не, это не то, но идею вы мне подали шикарную - напишу сам. Через information_schema не надо парсер писать, если я правильно понял
| |
|
|
|
2.41, Аноним (-), 03:15, 11/05/2015 [^] [^^] [^^^] [ответить]
| +/– |
> MySQL way (через ж...) ситуацию n юников на таблицу обошли стороной.
Т.е. обошли? необходимо указывать какой уник, иначе ошибка
| |
|
|