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

В общем из одной своей базы делаю запрос в другую 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
dnlink не хочет делать on conflict (...) do update set
    #39477323
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
dnlink не хочет делать on conflict (...) do update set
    #39477326
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
dnlink не хочет делать on conflict (...) do update set
    #39477348
an2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
All,

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


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