Прошу помощи с запросом

avkm
Дата: 03.04.2015 11:06:34
Добрый день.

С Postgres работаю совсем недавно т.к. возникла необходимость. Ранее работал только с SQL.

Задача классическая - необходимо узнать есть ли запись с первичным ключом в таблице, если есть - сделать update иначе - сделать insert.
1. Если делаю так(пример с сайта):

select * from table where rec_id = record_id;
if NOT FOUND then
--записей нет
insert... ;
else
--записи есть
update... ;
end if;

Ругается на переменную NOT FOUND.
2. Если делаю так

SET @Q = 0;

SELECT COUNT(*) INTO @Q
FROM tasks WHERE PK = 'блабла';
IF @QUANT = 0 then
INSERT INTO
ELSE
UPDATE
END IF;

Ругается на саму переменную Q. Возможно, дело в том, что в Postgres нельзя объявлять переменные внутри запроса.
Писал вместо SET - DECLARE, убирал символ @.
Прошу помощи как решить эту задачу.
Gold_
Дата: 03.04.2015 11:23:42
avkm,

Что это у вас функция? анонимный блок? Приведите код целиком.
avkm
Дата: 03.04.2015 11:29:24
Gold_,

нет, не функция. Я пишу это в тексте запроса.
Вопрос в том, можно ли это исполнить в тексте запроса как в SQL ?
Или надо писать функцию ?
Gold_
Дата: 03.04.2015 11:37:17
avkm,

тогда в анонимном блоке
Gold_
Дата: 03.04.2015 11:39:56
avkm,

Стоит понимать, что между проверкой (select) и какими-то действиями (insert, update) конкурирующие транзакции могли изменить вашу table
mad_nazgul
Дата: 03.04.2015 11:42:23
avkm,
Это вам не MS SQL со встроенным TSQL'ем.
Тут чистая, как слеза, декларативное программирование.
И никаких процедурных штучек.

А так читаем документацию по PostgreSQL (раздел INSERT) до полного просветления.

<:o)
avkm
Дата: 03.04.2015 11:44:02
Gold_,

понял, спасибо!