Ответы пользователя по тегу PostgreSQL
  • Не выполняются команды после подключения к БД в postgres?

    fzfx
    @fzfx
    18,5 дм
    Если при выполнении через docker/podman команды в контейнере (параметр exec) предполагается, что потребуется пользовательский ввод (т. е., как в вопросе выше, не только запустить psql, но и вводить команды для него), то важно не забывать про параметр -i docker/podman, который и обеспечивает работу ввода (передачу команд с клавиатуры запущенной через exec в контейнере программе).
    Обеспечиваемый параметром -i функционал не "бесплатен" (требует ресурсов системы и подвержен блокировкам либо является их источником), именно поэтому он вынесен в отдельный параметр, что позволяет для программ, требующим пользовательского ввода (или, правильнее сказать, ввода через stdin), предоставить его, задействовав соответствующие ресурсы и механизмы; при запуске программ, не требующих такового ввода, в свою очередь, опустив параметр -i, можно исключить их блокирование по вводу через stdin (возможно ошибочному или непреднамеренному), не выделять на обработку ввода ресурсы.
    Ответ написан
    Комментировать
  • Почему в patroni не применяется отредактированный конфиг через edit-config?

    fzfx
    @fzfx
    18,5 дм
    я так и не понял, какое значение вы ставите. буду исходить из того, что вы обозначили как "изменения".
    min_wal_size не может быть равен 0, соответственно некорректное значение не применяется. минимальное значение для него - 2.
    Ответ написан
  • От чего зависит количество единоверменных запросов, которые может обрабатывать БД?

    fzfx
    @fzfx
    18,5 дм
    это в общем случае определяется параметром max_connections.
    в случае, если количество подключений к серверу достигло данного максимума, то в новых подключениях будет отказано, пока не освободится одно из занятых подключений.
    если подключение установлено, то по нему может быть передан на выполнение запрос. он начнёт выполняться и, в зависимости от настроек таймаутов, от того, какие блокировки и на какие объекты имеются в СУБД и какой уровень изоляции используется, запрос либо выполнится; либо выполнится частично и встанет в ожидание освобождения какой-то из блокировок, и после освобождения продолжит выполняться; либо подождёт освобождения блокировки и прервётся по таймауту (результат такого частичного выполнения откатится); либо выполнится частично и прервётся по нарушению сериализации (результат такого частичного выполнения откатится).
    вроде ничего не забыл.
    Ответ написан
    3 комментария
  • Как при деплое тг бота на сервер решить вопрос с подключением к БД PostgreSQL?

    fzfx
    @fzfx
    18,5 дм
    Не могу никак найти годный ресурс, в котором можно почитать и понять, что мне требуется.


    Один из самых годных ресурсов - документация. В частности, разделы про подключение и аутентификацию:
    https://postgrespro.ru/docs/postgresql/16/runtime-...
    https://postgrespro.ru/docs/postgresql/16/client-a...

    PostgreSQL на сервере уже установил, даже создал БД, но подключить не получилось к боту.


    Вам следует привести получаемое сообщение об ошибке в таком случае.
    И я бы ещё рекомендовал попробовать попробовать подключиться с помощью клиента psql (он у вас уже установлен, коль вы поставили сервер postgresql) и добавить сюда и его сообщение об ошибке, поскольку с трейсами питона обычно разбираться мало кому охота (не говоря уже о том, что в них не всегда есть что-то внятное по проблеме подключения).

    Вы пишите, что настройки в .env-файле у вас стандартные. Вместе с тем у вас в .env задан пароль пользователя postgres, а в стандартной поставке postgresql в Linux у пользователя postgres пароля нет (и подключения под этим пользователем принимаются только с local-авторизацией на unix-сокет, по TCP/IP вы не подключитесь).
    Так что в вашем случае я бы сначала через sudo залогинился под root, через su переключился на пользователя ОС postgres, подключился к СУБД из терминала с помощью psql, создал нового пользователя СУБД, затем назначил бы ему пароль, а уже эти логин и пароль нового пользователя использовал бы в .env.
    https://postgrespro.ru/docs/postgresql/16/sql-crea...
    Ответ написан
    4 комментария
  • Почему при установке Sequelize, не устанавливается pgAdmin?

    fzfx
    @fzfx
    18,5 дм
    вам нужно поставить pgAdmin4 или что-то, в состав чего pgAdmin4 входит.
    в состав squelize pgAdmin4 не входит. в состав PostgreSQL pgAdmin4 входит, насколько я знаю, только в тот, который поставляется EDB. какой Postgres в ставили - вы не написали. очевидно либо не от EDB, либо от EBD, но не выбрали установку pgAdmin4 вместе с ним.
    Ответ написан
    Комментировать
  • Как добиться корректной остановки postgres при остановке контейнера docker?

    fzfx
    @fzfx
    18,5 дм
    Попробуйте заменить
    su postgres -c '/opt/pgpro/bin/postgres'
    на
    setpriv --reuid=UID --regid=GID --init-groups postgres /opt/pgpro/bin/postgres
    , заменив UID на UID пользователя postgres в контейнере; GID на GID группы postgres в контейнере.
    Ответ написан
    Комментировать
  • Как в логах постгреса идентифицировать к какому запросу относится ROLLBACK?

    fzfx
    @fzfx
    18,5 дм
    я не уверен, но если вы настроите log_line_prefix таким образом, что в нём будет отображаться PID процесса, то вам будет достаточно найти в логе запись с тем же PID процесса, предшествующую записи с ROLLBACK.
    Ответ написан
    Комментировать
  • Можно ли присвоить название колонки на русском в postgres при выборке данных?

    fzfx
    @fzfx
    18,5 дм
    задать - можно. использовать в этом же селекте в where - нет.
    Ответ написан
  • Как правильно написать docker-compose для postgresql?

    fzfx
    @fzfx
    18,5 дм
    нет по тому IP и порту, к которым подключаетесь, пользователя admin (или не подошёл пароль), что тут ещё скащать. убедитесь, что подключаетесь к верным IP и порту. с портом вроде всё ясно, 5432. насчёт IP - зависит, откуда вы подключаетесь. если с хостовой ОС (в которой стоит докер, в котором поднят контейнер с БД) - по идее коннектиться надо на 127.0.0.1. если же подключаетесь из контейнера в той же сети докера, что и БД - тогда это будет хост db.
    Ответ написан
  • На основании чего PostgreSQL сортирует данные в JSONField?

    fzfx
    @fzfx
    18,5 дм
    в PostgreSQL строка типа jsonb будет хранить ключи, отсортированные в лексикографическом порядке, что вы и демонстрируете.
    если хотите сохранить порядок, который был при вставке - используйте тип json. но в этом случае формат хранения отличен от jsonb (по факту более приближен к text, насколько я знаю), и для операций, доступных только для jsonb (если таковые есть) придётся кастовать json в jsonb.
    Ответ написан
    Комментировать
  • Как вернуть свои данные в PgAdmin4?

    fzfx
    @fzfx
    18,5 дм
    Видать где-то что-то вы сделали не так.
    Например, за другим АРМ вы подключились не к БД одного АРМ, а к БД другого АРМ.
    Или смотрите куда-то не туда.
    Или те данные не сохранили в БД на одном АРМ.
    Если бы вы привели команды, которыми вы подключаетесь к БД с одного АРМ и с другого АРМ, а также запрашиваете данные на одном АРМ и другом АРМ, возможно, что-то стало бы понятнее.
    Ответ написан
    1 комментарий
  • Как в PostgreSQL для определенных пользователей поставить idle_in_transaction_session_timeout?

    fzfx
    @fzfx
    18,5 дм
    alter role username set idle_in_transaction_session_timeout = '1000min';
    вестимо.
    возможно потребуется этим пользователем переподключиться, к сожалению, не в курсе, применяется ли это к уже имеющимся сессиям на стороне PostgreSQL.
    Ответ написан
    1 комментарий
  • PostgreSQL в Django проекте не отображает файл базы данных?

    fzfx
    @fzfx
    18,5 дм
    postgresql хранит базу данных не в одном файле, а во множестве файлов в разветвлённой группе каталогов. данный каталог задаётся при запуске сервера postgresql, и он не должен размещаться в каталогах каких-либо других программ, проектов и т. п. (вплоть до того, что доступ на корневой каталог данных БД выдаётся только пользователю и группе postgres). ну т. е. если вы установили сервер postgresql, то файл базы данных есть, и не один, просто в том месте, где должен быть, а не в том, в котором вам кажется уместным. =)
    подключение к БД происходит либо по протоколу TCP, либо через unix-сокет, а не через какой-то файл базы данных. как именно это правильно делать - читайте документацию к вашему фреймворку по работе с postgresql.
    Ответ написан
    1 комментарий
  • Что происходит в момент добавления нового столбца в БД?

    fzfx
    @fzfx
    18,5 дм
    я не понял, что имеется ввиду под дозаписью колонки в существующую структуру. если колонка создаётся без указания default-значения, то перезаписи строк в таблице не происходит, меняется лишь заголовочная часть (в которую добавляется информация о новой колонке) и битовая карта null'ов (относительно дешёвая операция). если колонка создаётся с указанием default-значения, то происходит пересоздание (удаление и новая вставка) всех строк в таблице с добавлением нового поля с default-значением (со всеми вытекающими в виде сбросов грязных страниц на диск, частичным вымыванием кеша, генерацией WAL, запусками автовакуума). индексы при этом также перезаписываются в моменты проходов автовакуума (при вычищении мёртвых версий строк указатели в индексах меняются на актуальные версии строк).
    Ответ написан
  • Как найти разницу межу двумя датами, если даты на разных строках?

    fzfx
    @fzfx
    18,5 дм
    Если переименовать колонку "date" в "r_date", а таблица называется "testtable04", то, воспользовавшись функциями min и max, а также группировкой, можно сделать как-то так:
    select id, max(r_date) - min(r_date) minute_difference from testtable04 group by id;

    Пример.
    Ответ написан
  • Как восстановить дб Postgres на компьютере из файла .gz?

    fzfx
    @fzfx
    18,5 дм
    Попробуйте распаковать file.gz и выполнить для file.out следующую команду:
    file file.out
    Если напишет, что это текстовый файл, проверьте текстовым редактором, что внутри. Если команды SQL - значит восстанавливать этот дамп следует через утилиту psql.
    Если напишет, что это PostgreSQL custom, то восстанавливать следует через pg_restore.
    Как происходит восстановление через pg_admin и каких форматов дампа, я не знаю.
    Ответ написан
    Комментировать
  • Как разблокировать изменение данных в postgresql?

    fzfx
    @fzfx
    18,5 дм
    я хочу изменить данные напрямую в таблице, а не языком sql

    напрямую в таблице данные меняются шестнадцатиричным редактором (не забывая про остановку сервера ostgres, контрольные суммы, если включены, и журнал предзаписи). при изменении данных через pgadmin4 они меняются не напрямую, под капотом там всё-равно SQL-запрос.

    Скорее всего проблема в этих замочках

    насколько я знаю, pgadmin4 не даст менять таблицу, если в ней отсутствует хотя бы один столбец, для которого указан первичный ключ, он же PRIMARY KEY. если структура и назначение вашей таблицы позволяют - сделайте первичный ключ по какому-либо из полей, хотя бы по тому же id, на первый взгляд он для этого у вас подходит.
    Ответ написан
  • Как исправить ошибку синтаксиса при COPY?

    fzfx
    @fzfx
    18,5 дм
    Возможно проблема в том, что вы не экранируете ключевое слово name. Хотя могу и ошибаться. Не смотря на то, что это слово ключевое, оно вроде как может использоваться в качестве имён столбцов и таблиц.
    Ответ написан
    23 комментария
  • Как узнать завершилось ли индексирование БД?

    fzfx
    @fzfx
    18,5 дм
    AFAIK "idle" означает, что соответствующее ему соединение с БД ожидает поступления новой команды на выполнение, завершив предыдущую. Т. е., другими словами, запрос был выполнен, соединение не было закрыто.
    Ответ написан
    Комментировать
  • SQL Ошибка 42703, как исправить?

    fzfx
    @fzfx
    18,5 дм
    Проблема из-за того, что вы нарушили синтаксис запроса в месте вставки значения, подсвеченного курсором на скриншоте. Более подробно можно ответить, если вы предоставите структуру данной таблицы. Пока же можно лишь предположить, что вы, пытаясь вставить текстовые данные, забыли обрамить их в одинарные кавычки.
    Ответ написан
    Комментировать