Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
Парни, совет нужен. Имеем: 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' так же ни на что не влияет. Надеюсь на мощь коллективного разума :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:03 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
sefeld а как же primary key?! только что проверил, 8.1.3/win, client/server encoding - SQL_ASCII (без collate). Результат - constraint violation, чего и следовало ожидать. 1: отпиши разработчикам, так как collates - штука новая, то вероятно баг. 2: первичные ключи по строкам - это плохо даже если не глючит (надеюсь, понятно, что я имею в виду ;) так как для отключения коллэйта тебе придется переинициализировать кластер, что, вероятно, нежелательно, то выход - сотвори себе serial или int8/sequence ключ и все будет ok. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:30 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
Проблема в том, в базе под 2 сотни таблиц, и таких primary key полно :( Неужто без переделки таблиц никак? База кочевала еще с времен postgres-7, все было нормально до времен включая postgresql-8.1.0 / libc6-2.5.8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:40 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
sefeldПроблема в том, в базе под 2 сотни таблиц, и таких primary key полно :( Неужто без переделки таблиц никак? База кочевала еще с времен postgres-7, все было нормально до времен включая postgresql-8.1.0 / libc6-2.5.8 раз база еще с седьмой версии, то на коллэйты она не расчитывает (их тогда еще не было ;) так как ты только что создал кластер - переинициализируй его без оных - должно заработать (у меня точно работает, не думаю, что такие вещи по разному интерпретируются в зависимости от платформы сервера). если кластер непустой и нельзя дропнуть - поставь еще одну копию сервера на другой порт и сделай там правильный кластер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:52 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
А сортировка-то русских записей при sql_ascii будет ли правильной? При переходе на 8.x пробовал когда-то, и не получалось нормально. RTFM привел к тому, что sql_ascii рекомендуют применять только когда символы 0...127. Извиняй за занудство, но я не "базист", к сожалению :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 18:04 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
не, client/server encoding оставь как было. нужно отключить collate, который позволяет системе знать, где в данной кодировке большие буквы, а где маленькие. Твоя база справляется с этим сама, так как не было этой возможности в семерке. Я, например, для обработки русских букв просто написал несколько своих функций типа rusupper/ruslower (расширенные аналоги upper/lower) и всего делов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 18:15 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
вчера устроил еще один тест (на 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 10:08 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
Проблему решил следующим способом: postgres:~$ LC_ALL=C initdb -E UNICODE -D main т.е. кластер создается в локали "C", а серверный процесс функционирует в utf8. В этом случе все работает нормально, и ключи и сортировки. Если же серверный процесс имеет другую кодировку, то ключи остаются нормальными, но сортировки не работают правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 12:46 |
|
||
|
у кого из нас едет крыша? у меня или у postgresql-8.1.3?
|
|||
|---|---|---|---|
|
#18+
sefeldПроблему решил следующим способом: postgres:~$ LC_ALL=C initdb -E UNICODE -D main т.е. кластер создается в локали "C", а серверный процесс функционирует в utf8. В этом случе все работает нормально, и ключи и сортировки. Если же серверный процесс имеет другую кодировку, то ключи остаются нормальными, но сортировки не работают правильно. собственно, можешь поспособствовать развитию проекта путем информирования разработчиков об ошибке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 13:07 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33574932&tid=2006597]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
22ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 328ms |

| 0 / 0 |
