172 похожих чатов

Привет, у меня проблема при запуске psql. Я запускаю

в докере и добавил entrypoint.
В нём я создаю расширение:
psql -v ON_ERROR_STOP=0 --username "$POSTGRES_USER" <<-EOSQL
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
EOSQL
Но получаю
CREATE EXTENSION
2022-01-12 21:54:35.795 UTC [47] LOG: received fast shutdown request
т.е. при выполнении этой строчки psql почему-то вырубается и не создаёт расширение(
чё делать?)
upd: он вырубется всегда, после выболнения скрипта. Но почему расширение не сохраняется?

29 ответов

35 просмотров
Ruslan- Автор вопроса

up. помогите пж, что может быть

Посмотрите в логе сервера. Предположу, что при запуске С-шного кода инициализации расширения сервер падает

Ruslan- Автор вопроса
alex che
Посмотрите в логе сервера. Предположу, что при зап...

да дело в том, что при перезапуске он мне возвращает ещё extension already exist. Тем не менее в запущенном постгресе его нет. Как будто он при инициализации запускает какой-то другой обработчик sql. А потом вырубает и врубает нормальный

Ruslan
up. помогите пж, что может быть

А хотя бы create table какой-нибудь, вручную сделанный, остаётся? А то вообще это умолчание в докере -- убивать контэйнер вместе с внешним слоем, насколько я помню.

Ruslan- Автор вопроса
Ilya Anfimov
А хотя бы create table какой-нибудь, вручную сдела...

да все остальные команды из начального скрипта работают норм (таблички создаются, пользователи)

Ruslan- Автор вопроса
Ruslan
да все остальные команды из начального скрипта раб...

ну и просто если отправить запрос на создание расширения - оно создаётся норм и остаётся

Ruslan
да дело в том, что при перезапуске он мне возвраща...

И да, если extension already exists -- то оно создалось. Если вам что-то не нравится в результатах его создания -- то так и пишыте.

Ruslan- Автор вопроса
Ilya Anfimov
И да, если extension already exists -- то оно созд...

его нет в запущенном psql, оно не создалось совсем. я могу продемонстрировать, если не верите

Ruslan
да дело в том, что при перезапуске он мне возвраща...

Я не очень понял, что значит "при перезапуске он мне возвращает ещё extension already exist". Но если упало в процессе инициализации, то может быть неконсистентное состояние расширения. Попробуйте разширение включить в preload_libraries —- может получите другую диагностику. Ещё можно увеличить DEBUG_LEVEL — опять другую диагностику. Но это всё имеет смысл, если вы будете эту диагностику честно искать в логах

Ruslan
его нет в запущенном psql, оно не создалось совсем...

В смысле -- про "совсем" ошыбаетесь. ТАк-то его можэт не быть в любом psql, конечно. Например, потому что там транзакцыя раньшэ открыта или потому, что он к другой базе подключён.

Пока что я предполагаю, что сценарий какой-то такой: у вас в докере не установлена какая-то библиотека, нужная для расширения (или не той версии). Когда вы говорите CREATE EXTENSION — оно падает и весь postgres тоже

Ruslan- Автор вопроса
alex che
Пока что я предполагаю, что сценарий какой-то тако...

он не падает, я ведь написал - он всегда перезапускается после выполнения скрипта entrypoint. Всегда, даже если там нет этой команды с расширениями

Ruslan- Автор вопроса
alex che
Пока что я предполагаю, что сценарий какой-то тако...

вот, я например два раза эту команду попробовал запустить - первый раз она прошла, второй раз написало already_exist

Ruslan
он не падает, я ведь написал - он всегда перезапус...

Вот эта фраза "LOG: received fast shutdown request" значит падает, имхо

alex che
Вот эта фраза "LOG: received fast shutdown reques...

Если бы падает -- было бы сказано про сигнал, который пришёл незадачливому процэссу и про то, что мы экстренно убиваемся, поскольку shared_buffers могут быть повреждены. А это -- ну, мало ли. Можэт, докер не настроен на работу постоянно.

Ruslan
screenshot вот, я например два раза эту команду попробовал за...

Тогда может быть проблема именно в том, что после перезапуска расширения нет. Надо его тогда прописать в "автозагрузку"

Ruslan
а как это сделать?

Прописать библиотеку в параметр shared_preload_libraries + я видел стенд, где код стартапа тоже выполнялся, но сейчас не помню, как это делать

alex che
Прописать библиотеку в параметр shared_preload_lib...

uuid? Это какая-то странная библиотека uuid, что ей нужно shared_preload_libraries.

Ilya Anfimov
uuid? Это какая-то странная библиотека uuid, что е...

Согласен, в описании расширения должно быть сказано, как его правильно инициализировать

alex che
Согласен, в описании расширения должно быть сказан...

Я думаю, что это предположэние насчёт shared_preload_libraries в данном случае неверно.

Ruslan- Автор вопроса
alex che
Прописать библиотеку в параметр shared_preload_lib...

вот так сделал, не получилось, в логах ошибок нет

Ruslan
screenshot вот так сделал, не получилось, в логах ошибок нет

Теперь надо удостовериться, что подключаетесь вы к тому хосту, тому кластеру и той базе данных.

Ruslan
100%

Для проверки можэте, кстати, запустить там на сервере нормальный psql с теми жэ аргументами, что вы для своего скрипта использовали -- и сделать тожэ самое из него.

Ruslan
100%

И да, я не верю в чудеса. В то, что человек относительно новый в теме из dbeaverа промахнулся -- верю легко. В чудеса, когда расшырение есть для CREATE EXTENSION и нет для всех аналогов \dx -- не верю.

Ruslan
screenshot вот, я например два раза эту команду попробовал за...

Вот здесь в середине фраза "PostgreSQL init process complete" меня смущает. Может оно создаёт новую базу между этими шагами?

Ruslan- Автор вопроса
alex che
Вот здесь в середине фраза "PostgreSQL init proces...

в доке вычитал, что для сценариев entrypoints запускается "временный демон" Also, as of docker-library/postgres#440 , the temporary daemon started for these initialization scripts listens only on the Unix socket, so any usage should drop the hostname portion (see docker-library/postgres#474 (comment) for example).

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта