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 ответов

22 просмотра
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).

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Карта сайта