Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dnlink не хочет делать on conflict (...) do update set / 4 сообщений из 4, страница 1 из 1
25.06.2017, 19:01
    #39477304
an2k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnlink не хочет делать on conflict (...) do update set
Не могу понять, одно из трех:
то ли он это в принципе не может, то ли руки кривы...

В общем из одной своей базы делаю запрос в другую mybase и результат записываю в текущую.
Таблицы идентичные, но в текущей часть данных из mybase уже есть.
Т.е. нужно новые инсертнуть, а старые апдейтнуть.

Инсертится нормально:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select dblink_connect('myconn', 'dbname=mybase');

insert into marks (mk_guid, mk_st_guid, mk_mark5)
select mk_guid, mk_st_guid, mk_mark5
from dblink('myconn','select mk_guid, mk_st_guid, mk_mark5 from marks limit 100')
as t (mk_guid character(36), mk_st_guid character varying(36), mk_mark5 integer)
on conflict (mk_guid) do nothing ;
INSERT 0 100



А вот апдейт никак не получается:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select dblink_connect('myconn', 'dbname=mybase');

insert into marks (mk_guid, mk_st_guid, mk_mark5)
  select mk_guid, mk_st_guid, mk_mark5
    from dblink('myconn',
      'select mk_guid, mk_st_guid, mk_mark5 from marks limit 100')
  as t (mk_guid character(36),
         mk_st_guid character varying(36),
         mk_mark5 integer)
  on conflict (mk_guid) do update set
    marks.mk_guid = t.mk_guid,
    marks.mk_st_guid = t.mk_st_guid,
    marks.mk_mark5 = t.mk_mark5;

ERROR:  missing FROM-clause entry for table "t"
LINE 9:     marks.mk_guid = t.mk_guid, 
                            ^



Подскажет ли многоуважаемый All куда копать?
...
Рейтинг: 0 / 0
25.06.2017, 20:32
    #39477323
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnlink не хочет делать on conflict (...) do update set
an2k,
похоже, кто-то недокурил мануал
RTFM
Код: sql
1.
EXCLUDED



https://www.postgresql.org/docs/current/static/sql-insert.html
https://postgrespro.ru/docs/postgrespro/9.6/sql-insert


...
Рейтинг: 0 / 0
25.06.2017, 20:37
    #39477326
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnlink не хочет делать on conflict (...) do update set
dblink ни при чём, да.

авторThe SET and WHERE clauses in ON CONFLICT DO UPDATE have access to the existing row using the table's name (or an alias), and to rows proposed for insertion using the special excluded table.
Вот так будет:
Код: sql
1.
2.
3.
4.
on conflict (mk_guid) do update set
    mk_guid = excluded.mk_guid,
    mk_st_guid = excluded.mk_st_guid,
    mk_mark5 = excluded.mk_mark5;
...
Рейтинг: 0 / 0
25.06.2017, 22:14
    #39477348
an2k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnlink не хочет делать on conflict (...) do update set
All,

Спасибо, други - помогло!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dnlink не хочет делать on conflict (...) do update set / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]