powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ERROR: duplicate key violates unique constraint
54 сообщений из 54, показаны все 3 страниц
ERROR: duplicate key violates unique constraint
    #33330812
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
psql -8.0.2

INSERT INTO test (code, name ) VALUES ('АБВ', 'Вася');
INSERT INTO test (code, name ) VALUES ('АБВГ', 'Петя');
INSERT INTO test (code, name ) VALUES ('АБВГД', 'Саша');

ERROR: duplicate key violates unique constraint
господа, подскажите пожалуйста, почему появляется такая ошибка?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33330828
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geko wrote:
> psql -8.0.2
>
> INSERT INTO test (code, name ) VALUES ('АБВ', 'Вася');
> INSERT INTO test (code, name ) VALUES ('АБВГ', 'Петя');
> INSERT INTO test (code, name ) VALUES ('АБВГД', 'Саша');
>
> ERROR: duplicate key violates unique constraint
> господа, подскажите пожалуйста, почему появляется такая ошибка?

Господин, покажите пожалуйста, описание таблицы test
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33330914
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create table test (
code char(5) not null,
name varchar(100) not null,
CONSTRAINT xpktest PRIMARY KEY (code)
);
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33331107
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм, а перед вставкой таблица пустая и таких значений ключей в ней нет?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33331140
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XM
Гм, а перед вставкой таблица пустая и таких значений ключей в ней нет?
Posted via ActualForum NNTP Server 1.3

да таблица пустая...

слушай, а какова вероятность того, что psql не понимает русских букв при написании от руки скрипта через psql?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33331151
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
geko XM
Гм, а перед вставкой таблица пустая и таких значений ключей в ней нет?
Posted via ActualForum NNTP Server 1.3

да таблица пустая...

слушай, а какова вероятность того, что psql не понимает русских букв при написании от руки скрипта через psql?

хотя кодировка базы koi8r, локаль тоже koi8r....

и при 3-х строках
INSERT INTO test (code, name ) VALUES ('АБВ', 'Вася');
INSERT INTO test (code, name ) VALUES ('АБВГ', 'Петя');
INSERT INTO test (code, name ) VALUES ('АБВГД', 'Саша');

может 1 insert, а остальные с ошибкой:
ERROR: duplicate key violates unique constraint
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33331184
Откуда insert выполняется?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33331198
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PostgreSQL начинающийОткуда insert выполняется?

и ручками выполнялся и файликом выполнялся...
эффект одинаковый
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332471
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно ...
Ошибки быть не должно...
Специально попробовал - ситуация описанная выше не воспроизводится..
Все работает как и должно...

Вопрос - может есть конкурирущая незавершенная транзакция?
Типа добавил - и не закомитил...
а в другой транзакции - эти записи не видны - создается впечатление что таблица пустая но при добавлении нарываемся на кронфликт по ключу?
Как известно уникальность ключей в индексах проверяется вне транзакции...
Может в этом беда?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332523
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanix wrote:
> Вопрос - может есть конкурирущая незавершенная транзакция?
> Типа добавил - и не закомитил...

Тогда бы вторая транзакция ожидала commit первой.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332524
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanix
Вопрос - может есть конкурирущая незавершенная транзакция?
Типа добавил - и не закомитил...
а в другой транзакции - эти записи не видны - создается впечатление что таблица пустая но при добавлении нарываемся на кронфликт по ключу?

низзя сконфликтовать с незавершенной транзакцией, за исключением случая блокировки, но тогда у вас будет не ошибка дубля, а ожидание разблокировки, или максимум - ошибка таймаута в клиенте.

Скорее всего афтыр не проверяет пустоту таблы, а гонит пургу, а на деле он уже успел тудыть впиндюлить каку-нть записенку. Хотя и можно допустить, что существует некий неповторимый баг из-за кучи локальных кодировок.

domanix
Как известно уникальность ключей в индексах проверяется вне транзакции...
С этого места поподробнее. По возможности - дайте ссылку. Видимо разработчикам постгреса давно пора застрелицца и не смешить людей.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332604
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрю:
1. в случае "конфликта" по уникью между двумя транзакциями вторая просто ожидает завершения первой. (не зависит от READ COMMITTED | SERIALIZABLE )
2. В случае вставки "неконфликтных" записей обе отрабатывают в параллель

(т.е. блокировка одной транзакции другой происходит в процессе построения уникального индекса?)
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332713
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>(т.е. блокировка одной транзакции другой происходит в процессе построения уникального индекса?)

Да именно так
Версионность есть только у записей..
У ключей индексов версионности нет.
Поэтому если ключ уже появился в индексе - то не зависимо от того
завершена транзакция или нет - другой записи с таким же ключем вставить не удастся... И действительно - транзакция которая нарвалась на конфликт блокируется
пока конкурирующая транзакция не примет решения коммит или ролбак...
ИМХО - это нармальная ситуация..
Если вы считаете по другому - то раскажите как по вашему это должно работать?

В FirebirdSQL этот механизм работает также - за исключением того что транзакция не блокируется( есть параметр транзакции wait или nowait), и в случае чего откатыватеся конфликтный оператор, а не вся транзакция сразу......
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332765
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanix ИМХО - это нармальная ситуация..
1. ИМХО - абсолютно ненормальная.
Конфликт должен возникать только при попытке коммита. Как это реализовать - второй вопрос.
domanix Если вы считаете по другому - то раскажите как по вашему это должно работать?

В FirebirdSQL этот механизм работает также - за исключением того что транзакция не блокируется( есть параметр транзакции wait или nowait), и в случае чего откатыватеся конфликтный оператор, а не вся транзакция сразу......меня, честно говоря, не волнуют проблемы разработчиков.
Даже разработчиков "свободного" софта. Есть задача реализовать _нормальное_ поведение транзакции - над ней надо работать. А не достает скилзов или идей - ... дык и облезьян ВЫ ить тожа за людей не признаёте.

Интересно спросить о поведении уникью в Оракле. И о механизме реализации версионности индексов в нем. Я к сожалению не в курсе. Если всё так же плёхо - то сталобыть возможно существует органическая проблема версионной организации транзакции, если нет - проблема в конкретных решениях.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332890
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВОт нашел что-то о траблеме "версионности индексов" в Оракле, но не уверен, что фтему
softwarerdimitr
Мы говорили про "чисто версионный индекс", который бы позволил index-only scan. Для этого в ключ индекса надо внести transaction ID, который бы позволил определить видимость данной записи без чтения самой записи.

Вот здесь и кроется прелесть ораклового подхода. Индекс ничего не знает про какие-то версии. Механизм блоков просто умеет вернуть версию блока, соответствующую транзакции; соответственно, транзакция получает актуальный для нее индекс практически так же, как получает актуальные для себя данные. Transaction ID же учитывается в более внутренних, нежели индекс, структурах.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332905
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я почти не сталкивался с транзакциями. :( Но, по-моему, ситуация нормальная. Ведь одна из конкурирующих транзакциц не отваливается, а "зависает" (лочится). Это может случиться и при работе с таблицами без индексов.

1=> create table test ( foo integer );
CREATE TABLE
1=> insert into test values ( 1 );
INSERT 68935894 1
1=> begin;
BEGIN

2=> begin;
BEGIN
2=> update test set foo=2;
UPDATE 1

1=> update test set foo=3;
<ЗАВИСАЕТ>

P.S.: Вот, если я правильно понял, ваш эксперимент на постгресе и оракле (старом, другого нету). Поведение одинаковое.

PostgreSQL 8.0.3

1=> create table test ( id integer not null primary key );
NOTICE: CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "test_pkey" для таблицы "test"
CREATE TABLE
1=> begin;
BEGIN
1=> insert into test values ( 1 );
INSERT 68935899 1
1=> insert into test values ( 2 );
INSERT 68935900 1

2=> begin;
BEGIN
2=> insert into test values ( 3 );
INSERT 68935901 1
2=> insert into test values ( 2 );
<ЗАВИСАЕТ>

Oracle 8.1.7

1> create table test ( id integer not null primary key );
Table created.

2> insert into test values ( 1 );
1 row created.
2> insert into test values ( 2 );
1 row created.

1> insert into test values ( 3 );
1 row created.
1> insert into test values ( 2 );
<ЗАВИСАЕТ>
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332907
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напосинаю у постргеса версионная архитектура...
которая на данный момент есть толкьо у postgres, firebird (interbase),mySQL(innodb)
да у MS Yukon будет...
В отличии от других серверов записи в версионной архитектуре сразу попадают в таблицу , просто в засисимости от транзакции они видны или не видны..
Поэтому коммит в такой архитектуре ничего не делает - а просто увеличивает внутренний счетчик завершенных транзакций...
Если на этом этапе перед коммитом еще запустить механизм проверки уникальности - то это в большинстве ситуций будет довольно большой излишней нагрузкой...
Но если вам очень надо - то разработчики постгреса оставили для вас возможность
включить механимзм проверки после коммита...
смотрите например комманду SEt CONTARINT в части модификаторов DEFERRED | IMMEDIATE
IMMEDIATE constraints are checked at the end of each statement. DEFERRED constraints are not checked until transaction commit. Each constraint has its own IMMEDIATE or DEFERRED mode.
по моему это то что вам нужно...
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332937
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321ВОт нашел что-то о траблеме "версионности индексов" в Оракле, но не уверен, что фтему
softwarerdimitr
Мы говорили про "чисто версионный индекс", который бы позволил index-only scan. Для этого в ключ индекса надо внести transaction ID, который бы позволил определить видимость данной записи без чтения самой записи.

Вот здесь и кроется прелесть ораклового подхода. Индекс ничего не знает про какие-то версии. Механизм блоков просто умеет вернуть версию блока, соответствующую транзакции; соответственно, транзакция получает актуальный для нее индекс практически так же, как получает актуальные для себя данные. Transaction ID же учитывается в более внутренних, нежели индекс, структурах.Здесь вроде бы о возможности index scan без заглядывания в таблицу, которая есть в оракле. В постгресе нету. (При выборках, это не касается транзакций.)
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332953
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatПри выборках, это не касается транзакций.Глупость сморозил. При выборках. Но как раз транзакций и видимости записей это касается.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33332957
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
domanix wrote:
> Если на этом этапе перед коммитом еще запустить механизм проверки
> уникальности - то это в большинстве ситуций будет довольно большой
> излишней нагрузкой...
> Но если вам очень надо - то разработчики постгреса оставили для вас
> возможность
> включить механимзм проверки после коммита...
> смотрите например комманду SEt CONTARINT в части модификаторов DEFERRED
> | IMMEDIATE
> IMMEDIATE constraints are checked at the end of each statement. DEFERRED
> constraints are not checked until transaction commit. Each constraint
> has its own IMMEDIATE or DEFERRED mode.
> по моему это то что вам нужно...

Фиг там. UNIQUE и CHECK констрейнты в PostgreSQL отложить низзя.
Это давний известный баг, из-за которого и UPDATE не всегда атомарный.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333232
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
domanixСтранно ...
Ошибки быть не должно...
Специально попробовал - ситуация описанная выше не воспроизводится..
Все работает как и должно...

Вопрос - может есть конкурирущая незавершенная транзакция?
Типа добавил - и не закомитил...
а в другой транзакции - эти записи не видны - создается впечатление что таблица пустая но при добавлении нарываемся на кронфликт по ключу?
Как известно уникальность ключей в индексах проверяется вне транзакции...
Может в этом беда?

а попробуй так:
INSERT INTO test (code, name ) VALUES ('А01', 'Вася');
INSERT INTO test (code, name ) VALUES ('А02', 'Петя');
INSERT INTO test (code, name ) VALUES ('Б01', 'Саша');
INSERT INTO test (code, name ) VALUES ('Б02', 'Саша');
INSERT INTO test (code, name ) VALUES ('В01', 'Саша');
INSERT INTO test (code, name ) VALUES ('В02', 'Саша');
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333368
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все равно - не воспроизводится...
у меня 8.1b3
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333378
domanix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А база с какими настройками создана?
charset какой?
может и правда тут собака зарыта?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333609
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMФиг там. UNIQUE и CHECK констрейнты в PostgreSQL отложить низзя.
Это давний известный баг, из-за которого и UPDATE не всегда атомарный.
Posted via ActualForum NNTP Server 1.3именно из-за неверсионности индексов отложить UNIQUE не удасца. И именно поэтому перед апдейтом скажем id=id+1 приходица отсортировывать набор (т.е. проворачивать его в ф-ии пробегом по сортированному набору).


2 LeXa NalBat
Конкретно там (по сноске) - да - речь об индекс-скане. Но тот же механизм (если я его правильно просек) позволил бы развязать проблему проверки уникью по выходу (а не внутри транзакции - на каждой строке) - т.е. преодолеть тот же баг атомарности апдейта, и он же позволил бы развязать конкурирующие за некое значение уникью транзакции. (т.е. - "кто первый закоммитил - тот и прав, а тот, кто покурить вышел - _никого_не_держит, но получит отлуп при попытке коммита").
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333618
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
psql 8.0.2

база - KOI8

локаль
LANG=ru_RU.koi8r
LC_CTYPE="ru_RU.koi8r"
LC_NUMERIC="ru_RU.koi8r"
LC_TIME="ru_RU.koi8r"
LC_COLLATE="ru_RU.koi8r"
LC_MONETARY="ru_RU.koi8r"
LC_MESSAGES="ru_RU.koi8r"
LC_PAPER="ru_RU.koi8r"
LC_NAME="ru_RU.koi8r"
LC_ADDRESS="ru_RU.koi8r"
LC_TELEPHONE="ru_RU.koi8r"
LC_MEASUREMENT="ru_RU.koi8r"
LC_IDENTIFICATION="ru_RU.koi8r"
LC_ALL=

и все равно не дает сделать первичным ключом русские буквы :(
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333677
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
domanixВсе равно - не воспроизводится...
у меня 8.1b3
может Мне стоит попробовать обновиться до твоей версии?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333765
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321Конкретно там (по сноске) - да - речь об индекс-скане. Но тот же механизм (если я его правильно просек) позволил бы развязать проблему проверки уникью по выходу (а не внутри транзакции - на каждой строке) - т.е. преодолеть тот же баг атомарности апдейта, и он же позволил бы развязать конкурирующие за некое значение уникью транзакции. (т.е. - "кто первый закоммитил - тот и прав, а тот, кто покурить вышел - _никого_не_держит, но получит отлуп при попытке коммита").Даже боюсь размышлять о таких высоких материях со своей дилетантской позиции, потому что почти наверняка упущу какую-нибудь важную тонкость. Но, как я показал на примере, у древнего оракла (в котором тем не менее индекс скан есть) поведение аналогичное - транзакция зависает, а не получает отлуп при попытке коммита, как вы предлагаете. Правда, иное поведение у транзакции после зависания, если конкурирующую завершили коммитом. В постгресе отваливается вся транзакция - надо делать роллбэк, а в оракле только висевший стэйтмент, транзакцию можно продолжать.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33333806
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatкак я показал на примере, у древнего оракла...был невнимателен, "вспылил(с)"

мдя-с .Таки трабла с "недо"версионностью как таковой (уникью обчий и в оракле для усих транзакций?)? Какого же ляда он тады атомарно уникью перестраивать горазд (внутри одной транзакции)? чё-то туманно это мине

И что, отложить уникью в ём тоже низзя?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33334395
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321уникью обчий и в оракле для усих транзакций?Каким экспериментом это можно проверить?
4321И что, отложить уникью в ём тоже низзя?Судя по доке можно. (Для доступа требуется регистрация.)
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33334592
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat 4321уникью обчий и в оракле для усих транзакций?Каким экспериментом это можно проверить?
4321И что, отложить уникью в ём тоже низзя?Судя по доке можно. (Для доступа требуется регистрация.)
спасибо за ссылку. Но оракла под рукой нету, а написанному даже в доке без теста верить не имею привычки. Разве как ввводным для теста и его трактовки. Т.ч. бодяжиться с регистрацией не стал.

Но видимо по инсертам Оракла ведет себя именно так как и Постгря ( см. туточки ) Что для некоторых и там было неожиданностью (блокировка не апдейта, но инсерта).


Т.ч. придеца иметь в виду возможность провисания транзакций и из-за инсертов в уникью. И по возможности избегать (по ссылке много бравых надежд, что ситуация, при правильном проектировании практицки невероятная, думаю - от избытка неоправданного оптимизма, хотя народец там и подкованный).
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33334651
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. по поводу невозможности в Оракле NOWAIT-а при инсерте там (по ссылке) тоже есь.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33334869
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа,
значит не видать мне первичного ключа русскими буковками да?
ERROR: повторный ключ нарушает констрейнт UNIQUE "xpktest"
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33335468
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gekoГоспода,
значит не видать мне первичного ключа русскими буковками да?
ERROR: повторный ключ нарушает констрейнт UNIQUE "xpktest"У меня ошибки не наблюдается. PostgreSQL 8.0.3.

=> create table test (
(> code char(5) not null,
(> name varchar(100) not null,
(> CONSTRAINT xpktest PRIMARY KEY (code)
(> );
NOTICE: CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "xpktest" для таблицы "test"
CREATE TABLE
=> INSERT INTO test (code, name ) VALUES ('АБВ', 'Вася');
INSERT 68935916 1
=> INSERT INTO test (code, name ) VALUES ('АБВГ', 'Петя');
INSERT 68935917 1
=> INSERT INTO test (code, name ) VALUES ('АБВГД', 'Саша');
INSERT 68935918 1
=> INSERT INTO test (code, name ) VALUES ('АБВГДЕ', 'Маша');
ERROR: значение велико для типа character(5)
=> select * from test;
code | name
-------+------
АБВ | Вася
АБВГ | Петя
АБВГД | Саша
(3 rows)

Наверное у вас проблема в настройках ОС или постгреса.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33335605
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat gekoГоспода,
значит не видать мне первичного ключа русскими буковками да?
ERROR: повторный ключ нарушает констрейнт UNIQUE "xpktest"У меня ошибки не наблюдается. PostgreSQL 8.0.3.

=> create table test (
(> code char(5) not null,
(> name varchar(100) not null,
(> CONSTRAINT xpktest PRIMARY KEY (code)
(> );
NOTICE: CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "xpktest" для таблицы "test"
CREATE TABLE
=> INSERT INTO test (code, name ) VALUES ('АБВ', 'Вася');
INSERT 68935916 1
=> INSERT INTO test (code, name ) VALUES ('АБВГ', 'Петя');
INSERT 68935917 1
=> INSERT INTO test (code, name ) VALUES ('АБВГД', 'Саша');
INSERT 68935918 1
=> INSERT INTO test (code, name ) VALUES ('АБВГДЕ', 'Маша');
ERROR: значение велико для типа character(5)
=> select * from test;
code | name
-------+------
АБВ | Вася
АБВГ | Петя
АБВГД | Саша
(3 rows)

Наверное у вас проблема в настройках ОС или постгреса.

может нам стоит с Вами настройки постргереса сравнить?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33335794
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gekoА какая у тебя OC?
может настройками поделишься?
может нам стоит с Вами настройки постргереса сравнить?У нас сисадмин занимается установкой оси, постгреса и других вещей. Я в этом почти не разбираюсь. :( Выполнить команду и показать ее выдачу могу. Какую команду? :)

Ось:
~$ uname
Linux
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33335858
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat gekoА какая у тебя OC?
может настройками поделишься?
может нам стоит с Вами настройки постргереса сравнить?У нас сисадмин занимается установкой оси, постгреса и других вещей. Я в этом почти не разбираюсь. :( Выполнить команду и показать ее выдачу могу. Какую команду? :)

Ось:
~$ uname
Linux

:( команд вывода конфигурации не знаю,
файлик посмотреть бы postgresql.conf
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33336608
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_connections = 100
shared_buffers = 1000 # min 16, at least max_connections*2, 8KB each
effective_cache_size = 8192 # typically 8KB each
stats_command_string = true
lc_messages = 'ru_RU.cp1251' # locale for system error message strings
lc_monetary = 'ru_RU.cp1251' # locale for monetary formatting
lc_numeric = 'ru_RU.cp1251' # locale for number formatting
lc_time = 'ru_RU.cp1251' # locale for time formatting

База создавалась: create database ... with encoding 'WIN-1251';
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33336893
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBatmax_connections = 100
shared_buffers = 1000 # min 16, at least max_connections*2, 8KB each
effective_cache_size = 8192 # typically 8KB each
stats_command_string = true
lc_messages = 'ru_RU.cp1251' # locale for system error message strings
lc_monetary = 'ru_RU.cp1251' # locale for monetary formatting
lc_numeric = 'ru_RU.cp1251' # locale for number formatting
lc_time = 'ru_RU.cp1251' # locale for time formatting

База создавалась: create database ... with encoding 'WIN-1251';

ну и у меня почти тоже самое только кодировка ru_RU.koi8r
единственное... изначально пакеты psql устанавливались на кодировке ru_RU.UTF-8, а база была сразу создана с кодировкой KOI8 с первого
момента работы, все данные тоже в кодировке koi-8r, а первичные
ключи не понимает... :(
есть еще предложения.... ??? .....

может стоит попытаться перейти на 8.0.3 ???
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33337964
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geko
может стоит попытаться перейти на 8.0.3 ???

Можно.
Но есть еще ряд интересных возможностей.

Вставь куда-нибудь русские буквы и сделай потом select чтобы увидеть, что именно получилось в базе.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33338157
Хых
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно, однако.
а если сначала инсерт, а потом примари кей?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33338656
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ilejn geko
может стоит попытаться перейти на 8.0.3 ???

Можно.
Но есть еще ряд интересных возможностей.

Вставь куда-нибудь русские буквы и сделай потом select чтобы увидеть, что именно получилось в базе.

не вопрос...

test=# INSERT INTO test (code, name ) VALUES ('125', 'Саша спит');
INSERT 13836517 1
test=# INSERT INTO test (code, name ) VALUES ('126', 'Маша гуляет');
INSERT 13836518 1
test=# INSERT INTO test (code, name ) VALUES ('127', 'Миша играет');
INSERT 13836520 1

test=# select * from test where code > 1;
code | name
-------+----------------------------------
125 | Саша спит
126 | Маша гуляет
127 | Миша играет
(записей: 3)

test=# select * from test where name = 'Маша гуляет';
code | name
-------+-------------
126 | Маша гуляет
127 | Миша играет
(записей: 2)

test=# select * from test where name = 'Миша играет';
code | name
-------+-------------
126 | Маша гуляет
127 | Миша играет
(записей: 2)

Как так может получиться если поле name = 'Маша гуляет' выводит сразу 2 строки
126 | Маша гуляет
127 | Миша играет

Так ведь не должно быть .... ??? .....
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33338745
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geko select * from test where name = 'Маша гуляет';
code | name
-------+-------------
126 | Маша гуляет
127 | Миша играет
(записей: 2)

А можно explain ?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33338758
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И
\d test;
из psql
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33339199
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_FalconИ
\d test;
из psql

test=# \d test
Таблица "public.test"
Колонка | Тип | Модификаторы
---------+------------------------+--------------
code | character(5) | not null
name | character varying(100) | not null
Индексы:
"xpktest" PRIMARY KEY, btree (code)
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33339202
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хыхинтересно, однако.
а если сначала инсерт, а потом примари кей?

если делать инсерт без первичного ключа то все нормально вставляется и ошибки не вылетает, а как потом добавить первичный ключ к таблице???
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33339203
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_Falcon geko select * from test where name = 'Маша гуляет';
code | name
-------+-------------
126 | Маша гуляет
127 | Миша играет
(записей: 2)

А можно explain ?

конечно можно...

psql -c "EXPLAIN SELECT * from test where name = 'Маша гуляет';"

QUERY PLAN
------------------------------------------------------
Seq Scan on test (cost=0.00..19.12 rows=4 width=77)
Filter: ((name)::text = 'Маша гуляет'::text)
(записей: 2)
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33339572
Хых
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geko хыхинтересно, однако.
а если сначала инсерт, а потом примари кей?

если делать инсерт без первичного ключа то все нормально вставляется и ошибки не вылетает, а как потом добавить первичный ключ к таблице???

может так?

ALTER TABLE "public"."table1"
ALTER COLUMN "aaa" SET NOT NULL;

ALTER TABLE "public"."table1"
ADD CONSTRAINT "new_index"
PRIMARY KEY ("aaa");
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33339620
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Попробуй дропнуть индекс и тогда сделать выборку - ситуация измениться?
2. Если не измениться, то что выдает следующий запрос?
Код: plaintext
select oprcode from pg_catalog.pg_operator where oprname='=' and oprleft= 25  and oprright= 25 ;
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33340053
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Funny_Falcon1. Попробуй дропнуть индекс и тогда сделать выборку - ситуация измениться?
Забудь, я глупый. У тебя и так SeqScan :-)
А второй вопрос?
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33340311
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_Falcon1. Попробуй дропнуть индекс и тогда сделать выборку - ситуация измениться?
2. Если не измениться, то что выдает следующий запрос?
Код: plaintext
select oprcode from pg_catalog.pg_operator where oprname='=' and oprleft= 25  and oprright= 25 ;


а что это такое oprcode?

oprcode
---------
texteq
(1 запись)
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33340347
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получилось повторить.. Может это появилось только в 8.1.xx?
create table test (code char(5) not nullname varchar(100) not nullCONSTRAINT xpktest PRIMARY KEY (code));INSERT INTO test (code name ) VALUES ('АБВ' 'Вася');INSERT INTO test (code name ) VALUES ('АБВГ' 'Петя');INSERT INTO test (code name ) VALUES ('АБВГД' 'Саша');select * from test order by name;explain analyze select * from test;select version();
------------------------------------------------------------------------------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
psql:p1.sql: 6 : NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "xpktest" for table "test"
CREATE TABLE
INSERT  390035   1 
INSERT  390036   1 
INSERT  390037   1 
 code  | name
-------+------

 АБВ   | Вася
 АБВГ  | Петя
 АБВГД | Саша
( 3  rows)

                                            QUERY PLAN
--------------------------------------------------------------------------------------------------
 Seq Scan on test  (cost= 0 . 00 .. 17 . 30  rows= 730  width= 77 ) (actual time= 0 . 005 .. 0 . 011  rows= 3  loops= 1 )
 Total runtime:  0 . 046  ms
( 2  rows)

                                             version
-------------------------------------------------------------------------------------------------
 PostgreSQL  8 . 0 . 3  on i386-unknown-freebsd5. 3 , compiled by GCC gcc (GCC)  3 . 4 . 2  [FreeBSD]  20040728 
( 1  row)

Нормально отработало и koi8 и с WIN кодировкой базы.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33341038
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShweikНе получилось повторить.. Может это появилось только в 8.1.xx?

Ты народ не пугай - у geko 8.0.2. Видно что-то не так с локалью в принципе на том компе,
т.к. по-моему постгресс использует общие сишные функции для сравнения по локали.
Но я могу ошибаться. Вобщем бред какой-то.
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33341952
geko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_Falcon ShweikНе получилось повторить.. Может это появилось только в 8.1.xx?

Ты народ не пугай - у geko 8.0.2. Видно что-то не так с локалью в принципе на том компе,
т.к. по-моему постгресс использует общие сишные функции для сравнения по локали.
Но я могу ошибаться. Вобщем бред какой-то.

Ладно, попытаюсь переустановить postgresql на более свежую... чуть попозже отпишу... и еще посоветуйте версию на которую обновиться можно... всем спасибо...
...
Рейтинг: 0 / 0
ERROR: duplicate key violates unique constraint
    #33342610
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ERROR: duplicate key violates unique constraint
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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