powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / у кого из нас едет крыша? у меня или у postgresql-8.1.3?
9 сообщений из 9, страница 1 из 1
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33574683
sefeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Парни, совет нужен. Имеем: posgresql-8.1.3 на debian/sid, libc6-2.3.6. initdb отработал в локали ru_RU.koi8r, нормально создал пустые базы, соответственно pg_controldata показывает

LC_COLLATE: ru_RU.koi8r
LC_CTYPE: ru_RU.koi8r

postmaster тоже работает в этом же окружении. Соединяемся с базой, делаем таблицу:

postgres@last:~$ psql
Welcome to psql 8.1.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=# show server_encoding;
server_encoding
-----------------
KOI8
(1 запись)

postgres=# show client_encoding;
client_encoding
-----------------
KOI8
(1 запись)

postgres=# create table test( s varchar(20) primary key );
NOTICE: CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "test_pkey" для таблицы "test"
CREATE TABLE
postgres=#

теперь делаем пару простых инсертов и наблюдаем чудо:

postgres=# insert into test values( 'фыва фыва' );
INSERT 0 1
postgres=# insert into test values( 'фыва фыва' );
INSERT 0 1
postgres=#

а как же primary key?!

если пробелов/знаков препинания нет, все нормально работает, если буквы НЕ кириллица, то тоже работает нормально. Смена кодировок по всяким вариантам ни на что не влияет, в UNICODE тоже пробовал, все ТОЧНО так же (за исключением вывода pg_controldata конечно). Замена 'primary key' на 'unique not null' так же ни на что не влияет.

Надеюсь на мощь коллективного разума :)
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33574786
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sefeld
а как же primary key?!


только что проверил, 8.1.3/win, client/server encoding - SQL_ASCII (без collate). Результат - constraint violation, чего и следовало ожидать.

1: отпиши разработчикам, так как collates - штука новая, то вероятно баг.
2: первичные ключи по строкам - это плохо даже если не глючит (надеюсь, понятно, что я имею в виду ;) так как для отключения коллэйта тебе придется переинициализировать кластер, что, вероятно, нежелательно, то выход - сотвори себе serial или int8/sequence ключ и все будет ok.
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33574834
sefeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том, в базе под 2 сотни таблиц, и таких primary key полно :( Неужто без переделки таблиц никак? База кочевала еще с времен postgres-7, все было нормально до времен включая postgresql-8.1.0 / libc6-2.5.8
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33574883
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sefeldПроблема в том, в базе под 2 сотни таблиц, и таких primary key полно :( Неужто без переделки таблиц никак? База кочевала еще с времен postgres-7, все было нормально до времен включая postgresql-8.1.0 / libc6-2.5.8

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

если кластер непустой и нельзя дропнуть - поставь еще одну копию сервера на другой порт и сделай там правильный кластер.
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33574932
sefeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А сортировка-то русских записей при sql_ascii будет ли правильной? При переходе на 8.x пробовал когда-то, и не получалось нормально. RTFM привел к тому, что sql_ascii рекомендуют применять только когда символы 0...127. Извиняй за занудство, но я не "базист", к сожалению :(
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33574970
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, client/server encoding оставь как было. нужно отключить collate, который позволяет системе знать, где в данной кодировке большие буквы, а где маленькие. Твоя база справляется с этим сама, так как не было этой возможности в семерке. Я, например, для обработки русских букв просто написал несколько своих функций типа rusupper/ruslower (расширенные аналоги upper/lower) и всего делов.
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33575842
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вчера устроил еще один тест (на 8.1.2/win, так как более новой версии под рукой не было). Сервер был установлен начисто с russian collation order и koi8-r encoding (server/client). описанная ситуация не обнаружилась.

n.b. в release notes 8.1.2 описывается исправление ошибки со сравнением строк в национальных кодировках. всем, у кого она возникает, рекомендуется обновление до 8.1.2 и reindex. От себя добавлю: еще лучше dump/restore, reindex и vacuum full analyze.
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33576605
sefeld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решил следующим способом:

postgres:~$ LC_ALL=C initdb -E UNICODE -D main

т.е. кластер создается в локали "C", а серверный процесс функционирует в utf8. В этом случе все работает нормально, и ключи и сортировки. Если же серверный процесс имеет другую кодировку, то ключи остаются нормальными, но сортировки не работают правильно.
...
Рейтинг: 0 / 0
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
    #33576721
dragonlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sefeldПроблему решил следующим способом:

postgres:~$ LC_ALL=C initdb -E UNICODE -D main

т.е. кластер создается в локали "C", а серверный процесс функционирует в utf8. В этом случе все работает нормально, и ключи и сортировки. Если же серверный процесс имеет другую кодировку, то ключи остаются нормальными, но сортировки не работают правильно.

собственно, можешь поспособствовать развитию проекта путем информирования разработчиков об ошибке :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / у кого из нас едет крыша? у меня или у postgresql-8.1.3?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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