powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
6 сообщений из 6, страница 1 из 1
LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
    #38536140
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Запустите у себя вот этот скриптик:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
show version;
set autoddl on;
commit;
recreate sequence g;
recreate table tu_src(id int primary key using index tu_src_pk, x int);
insert into tu_src select gen_id(g,1), mod(gen_id(g,0), 3) from rdb$types rows 5;
select * from tu_src;
commit;
recreate global temporary table gtt_tu(x int primary key) on commit preserve rows;
commit;

set term ^;
execute block as
begin
  delete from gtt_tu;
  merge into gtt_tu t
  using (select x from tu_src) s
  on s.x=t.x
  when not matched then
    insert values(s.x);
end^
set term ;^
select * from gtt_tu;


У мну на 2.5 он выдаёт "всё пучком":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
ISQL Version: LI-V2.5.3.26730 Firebird 2.5
Server version:
Firebird/linux AMD64 (access method), version "LI-V2.5.3.26730 Firebird 2.5"
Firebird/linux AMD64 (remote server), version "LI-V2.5.3.26730 Firebird 2.5/tcp (oel64)/P12"
Firebird/linux AMD64 (remote interface), version "LI-V2.5.3.26730 Firebird 2.5/tcp (oel64)/P12"
on disk structure version 11.2

          ID            X
============ ============
           1            1
           2            2
           3            0
           4            1
           5            2


           X
============
           1
           2
           0

А на 3.0 - "ругаеццо":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ISQL Version: LI-T3.0.0.30824 Firebird 3.0 Alpha 2
Server version:
Firebird/Linux/AMD/Intel/x64 (access method), version "LI-T3.0.0.30824 Firebird 3.0 Alpha 2"
Firebird/Linux/AMD/Intel/x64 (remote server), version "LI-T3.0.0.30824 Firebird 3.0 Alpha 2/tcp (oel64)/P13"
Firebird/Linux/AMD/Intel/x64 (remote interface), version "LI-T3.0.0.30824 Firebird 3.0 Alpha 2/tcp (oel64)/P13"
on disk structure version 12.0

          ID            X
============ ============
           1            1
           2            2
           3            0
           4            1
           5            2

Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_4" on table "GTT_TU"
-Problematic key value is ("X" = 1)
After line 21 in file mrg.sql


PS. Есть смутное сомнение, что поломато было недавно, т.к. летом я издевался на merge и там вроде бы всё было ОК.
...
Рейтинг: 0 / 0
LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
    #38536146
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидУ мну на 2.5 он выдаёт "всё пучком"
а на более свежем?
...
Рейтинг: 0 / 0
LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
    #38536155
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ISQL Version: WI-V2.5.3.26737 Firebird 2.5
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.5.3.26737 Firebird 2.5"
Firebird/x86/Windows NT (remote server), version "WI-V2.5.3.26737 Firebird 2.5/tcp (CSMIRROR)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.3.26737 Firebird 2.5/tcp (CSMIRROR)/P12"
on disk structure version 11.2

          ID            X
============ ============
           1            1
           2            2
           3            0
           4            1
           5            2


           X
============
           1
           2
           0

PS. "универсальный" скрипт для 2.5 и 3.0:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
show version;
set term ^;
execute block as begin
  begin
    execute statement 'create sequence g';
    when any do begin end
  end
end^
set term ;^
commit;

alter sequence g restart with 0;
recreate table tu_src(id int primary key using index tu_src_pk, x int);
commit;
insert into tu_src select gen_id(g,1), mod(gen_id(g,0), 3) from rdb$types rows 5;
select * from tu_src;
commit;
recreate global temporary table gtt_tu(x int primary key) on commit preserve rows;
commit;

set term ^;
execute block as
begin
  delete from gtt_tu;
  merge into gtt_tu t
  using (select x from tu_src) s
  on s.x=t.x
  when not matched then
    insert values(s.x);
end^
set term ;^
select * from gtt_tu;

...
Рейтинг: 0 / 0
LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
    #38536158
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WI-T3.0.0.30855 - тоже ругается, как и LI-T3.0.0.30824
...
Рейтинг: 0 / 0
LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
    #38536173
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на стабильный курсор. И я пока не уверен, что 2.5 работает правильно.
...
Рейтинг: 0 / 0
LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
    #38536187
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

погоди. Как раз в этом случае FB3 ведёт себя более корректно чем 2.5
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / LI-T3.0.0.30824: merge вываливает violation of PRIMARY KEY на when NOT matched
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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