mysql and pgsql

Статус
В этой теме нельзя размещать новые ответы.

afonya09

Полезный
Регистрация
31 Янв 2009
Сообщения
260
Реакции
19
В мускул можно так
INSERT INTO табл (id, name, region) VALUES ($ad, '$n', '$c')
ON DUPLICATE KEY UPDATE name = $n, region = '$c'
на id, name, region стоит ключ.
если пытается втавить запись которая уже есть он не вставит а обновит ее.
Есть что-то подобное на пгскул одним запросом???:thenks:
 
В мускул можно так
INSERT INTO табл (id, name, region) VALUES ($ad, '$n', '$c')
ON DUPLICATE KEY UPDATE name = $n, region = '$c'
Чем
Код:
REPLACE INTO табл (id, name, region) VALUES ($ad, '$n', '$c')
не угодил?

Есть что-то подобное на пгскул одним запросом???
 
ERROR: syntax error at or near "REPLACE"
LINE 1: REPLACE INTO weather_country (id, iso2, iso3, name) VALUES (...
^

********** Ошибка **********

ERROR: syntax error at or near "REPLACE"
SQL state: 42601
Характеристика:1

он не знает REPLACE
 
Я имел ввиду мускул - код
Код:
INSERT INTO табл (id, name, region) VALUES ($ad, '$n', '$c')
ON DUPLICATE KEY UPDATE name = $n, region = '$c'
и
Код:
REPLACE INTO табл (id, name, region) VALUES ($ad, '$n', '$c')
делает одно и тоже.

А как сделать тоже самое в постгресе, читать по линку, который я дал во 2-ом посте.
 
Там с подзапросом только.
Хотелось бы аналог мускул.
 
Хотелось бы аналог мускул.
Мне тоже много чего бы хотелось, только имеем мы то, что имеем.

Там с подзапросом только.
1. mysql тоже делает подзапрос, только он неявный.
2. если удастся найти решение без использования правил/тригеров/хранимок - поделитесь, очень интересно.
 
как вариант можно воспользоваться триггером для таблицы. Думаю не сложно будет переписать под себя из этого примера:

Код:
CREATE OR REPLACE FUNCTION MY_INSERT_UPDATE() RETURNS trigger AS $$
BEGIN
  if exists( select 1 from 1c_transaction where id = NEW.id ) then
    update 1c_transaction set date_start = now() where id = NEW.id;
    RETURN NULL;
  else
     NEW.date_start = now();
     RETURN NEW;
  end if;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER MY_INSERT_UPDATE BEFORE INSERT ON 1c_transaction FOR EACH ROW EXECUTE PROCEDURE MY_INSERT_UPDATE();
 
Всё проще
Код:
CREATE RULE "replace_mytable" AS
    ON INSERT TO "mytable"
    WHERE
      EXISTS(SELECT 1 FROM mytable WHERE id=NEW.id)
    DO INSTEAD
       (UPDATE mytable SET name=NEW.name, region=NEW.region WHERE id=NEW.id)
и всех делов.
 
Триггеры блокируют записи что не есть хорощо!!!
От мастера мне понравилось!!!!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху