If posible recompile package postgre-etersoft9.2-contrib_9.2.4-eter2ubuntu_amd64.deb Solved:http://tarkhil.livejournal.com/1154569.html?thread=8280841 4. В разных версиях постгреса то появляется, то исчезает макрос #define RelationUsesTempNamespace(relation) \ ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP) если его нет - то добавить в contrib/fasttrun/fasttrun.c
Откладываем задачи, к которым не обращались более 100 дней.
Беглый поиск по коду версии 9.2.14 не нашёл определение этого макроса $ack RelationUsesTempNamespace ./* rebased [0ca422f] contrib/fasttrun/fasttrun.c 47: if ( !RelationUsesTempNamespace(rel) ) ==== Согласно заявке 40385 без него Ubuntu ругается: ERROR: could not load library /usr/lib/x86_64-linux-gnu/postgresql/fasttrun.so undefined
В postgres с tag REL9_2_1 в файле rel.h есть макрос: /* * RelationUsesTempNamespace * True if relation's catalog entries live in a private namespace. */ #define RelationUsesTempNamespace(relation) \ ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP) В commit'е fe2ef429a19b25903438b882ce16617a6e700d0f (Fix failure to ignore leftover temp tables after a server crash.) он удаляется. При этом используется другая конструкция: - if (RelationUsesTempNamespace(rel)) + if (isTempOrToastNamespace(rel->rd_rel->relnamespace)) функция isTempOrToastNamespace находится в следующих файлах src/include/catalog/namespace.h src/backend/catalog/namespace.c заголовок и реализация соответственно. Но пока я не разобрался с ситуацией в gitum'е. Там вроде бы макрос ещё есть. А если нет, то как тогда собралось и слинковалось. А если есть, то в что вызывает ошибку. Нужно прокосультироваться с akv
(Ответ Станислав Коробейников на комментарий4) > В postgres с tag REL9_2_1 в файле rel.h есть макрос: > /* > * RelationUsesTempNamespace > * True if relation's catalog entries live in a private namespace. > */ > #define RelationUsesTempNamespace(relation) \ > ((relation)->rd_rel->relpersistence == RELPERSISTENCE_TEMP) > > В commit'е fe2ef429a19b25903438b882ce16617a6e700d0f (Fix failure to ignore > leftover temp tables after a server crash.) он удаляется. При этом > используется другая конструкция: > - if (RelationUsesTempNamespace(rel)) > + if (isTempOrToastNamespace(rel->rd_rel->relnamespace)) > функция isTempOrToastNamespace находится в следующих файлах > src/include/catalog/namespace.h > src/backend/catalog/namespace.c > заголовок и реализация соответственно. > > Но пока я не разобрался с ситуацией в gitum'е. Там вроде бы макрос ещё есть. > А если нет, то как тогда собралось и слинковалось. А если есть, то в что > вызывает ошибку. Нужно прокосультироваться с akv Посмотрел по истории веток rebased, upstream и mainline. В ветке upstream нет папки contrib и всего туда входящего. В коммите fe2ef429a19b25903438b882ce16617a6e700d0f действительно происходит глобальная замена макроса на функцию isTempOrToastNamespace(rel->rd_rel->relnamespace). Что не было выполнено в файлах из папки contrib. Почему собралось без ругани - загадка. В spece сборки не нашёл никаких ignore на проблемы линковки.
contrib'ы собираются с флагом shared, и при такой сборки gcc -I../../src/include -fpic -c -o fasttrun.o fasttrun.c gcc -fpic -shared -o fasttrun.so fasttrun.o можно собрать foo(bar()); и получить только два варнинга: fasttrun.c:38:2: warning: implicit declaration of function ‘foo’ [-Wimplicit-function-declaration] foo(bar()); ^ fasttrun.c:38:6: warning: implicit declaration of function ‘bar’ [-Wimplicit-function-declaration] foo(bar()); ^ Заменил - if (RelationUsesTempNamespace(rel)) на + if (isTempOrToastNamespace(rel->rd_rel->relnamespace)) варнинги сборки исчезли. Написал скрипт, который проходится по файлам sql в /usr/share/postgresql/extension и /usr/share/postgresql/contrib и выполняет. Т.е. должны ставиться все расширения. Ошибка в contrib'е нашлась. Пока не собрался postgres для p7 собрал на builder'е, и поставил с no-deps, эта ошибка ушла. Но из-за несовпадения версий libicu в p7 и сизифе появились другие.
(Ответ Станислав Коробейников на комментарий6) > contrib'ы собираются с флагом shared, и при такой сборки > gcc -I../../src/include -fpic -c -o fasttrun.o fasttrun.c > gcc -fpic -shared -o fasttrun.so fasttrun.o > > можно собрать foo(bar()); и получить только два варнинга: > > fasttrun.c:38:2: warning: implicit declaration of function ‘foo’ > [-Wimplicit-function-declaration] > foo(bar()); добавить -Werror=implicit-function-declaration ? https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
(In reply to Vitaly Lipatov from comment #7) > добавить -Werror=implicit-function-declaration ? > https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html попробовал в spec добавить: %add_optflags -Werror=implicit-function-declaration макрос должен добавлять CFLAGS в configure. не получилось. Не проходит проверку: checking whether long long int is 64 bits... no дело в том, что для проверки используется программа из config/c-compiler.m4 main() { exit(! does_int64_work()); } при этом, похоже, stdlib.h не инклудится. Т.е. и возникает тот самый варнинг, который делается ошибкой. добавил для сборки contrib и contrib/xml таким образом: %make_build -C contrib all CFLAGS="%optflags -Werror=implicit-function-declaration" всё прошло хорошо.
Закрываю до сборки
собралось
ошибка не воспроизводится, всё хорошо, закрываю
Конкретно эту ошибку можно тестировать следующим образом createdb -U postgres test psql -U postgres -d test -f /usr/share/postgresql/contrib/fasttrun.sql >> test.log || echo "error in $filedb". dropdb -U postgres test
Т.е. так: Конкретно эту ошибку можно тестировать следующим образом createdb -U postgres test psql -U postgres -d test -f /usr/share/postgresql/contrib/fasttrun.sql dropdb -U postgres test
(Ответ Станислав Коробейников на комментарий14) > Т.е. так: > Конкретно эту ошибку можно тестировать следующим образом > createdb -U postgres test > psql -U postgres -d test -f /usr/share/postgresql/contrib/fasttrun.sql > dropdb -U postgres test Что-то я не понял с какой версией мы работаем. В названии баги 9.2.4. А мы с тобой вроде о 9.2.14 говорили. Пакеты source для версии 9.2.4 имеют дату правки за 2013 год. А вот 9.2.14 вроде свежие. С 9.2.4 вообще что-то непонятное происходит: Createdb -U postgres test createdb: не удалось подключиться к базе template1: ?????: ???????????? "postgres" ?? ?????? ???????? ??????????? (Peer) #epmqp postgre postgre-etersoft9.2-9.2.4-eter2ubuntu postgre-etersoft9.2-contrib-9.2.4-eter2ubuntu postgre-etersoft9.2-seltaaddon-9.2.4-eter2ubuntu postgre-etersoft9.2-server-9.2.4-eter2ubuntu -------- В 9.2.1 ошибка уже с переводом на русский язык createdb -U postgres test createdb: не удалось подключиться к базе template1: ВАЖНО: пользователь "postgres" не прошёл проверку подлинности (Peer) -------- Пока ещё не нашёл в чём причина или что я не донастроил.
(In reply to Konstantin Artyushkin from comment #15) > Что-то я не понял с какой версией мы работаем. В названии баги 9.2.4. > А мы с тобой вроде о 9.2.14 говорили. Сейчас речь идёт о 9.2.14. Нужно что бы эта версия заработала > createdb: не удалось подключиться к базе template1: ВАЖНО: пользователь > "postgres" не прошёл проверку подлинности (Peer) в pg_hba.conf нужно поставить local ...... trust http://wiki.etersoft.ru/PostgreSQL#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_PostgreSQL
Проверил всё работает: $createdb -U postgres test $ psql -U postgres -d test -f /usr/share/postgresql/contrib/fasttrun.sql BEGIN CREATE FUNCTION COMMIT $ dropdb -U postgres test