Задать вопрос
Ответы пользователя по тегу PostgreSQL
  • Можно ли отключить track_activities в Postgresql16?

    fzfx
    @fzfx
    18,5 дм
    SET track_activities = off;, как и другие SET-команды, позволяющие менять параметры без перезапуска, работает только в пределах сессии.
    Для смены в пределах кластера следует пользоваться ALTER SYSTEM SET: https://postgrespro.ru/docs/postgresql/17/sql-alte...
    Например:
    ALTER SYSTEM SET track_activities = off;
    Поскольку этот параметр можно менять без перезапуска PostgreSQL, далее для применения должно быть достаточно выполнить SELECT pg_reload_conf();
    Будете проверять с помощью SHOW track_activities; - не забудьте перезайти в psql.
    Ответ написан
    1 комментарий
  • Можно ли перенести файл с партицией из таблицы в одной БД Postgresql в другую БД?

    fzfx
    @fzfx
    18,5 дм
    нет, нельзя.
    этому мешает то, что если вы выполните перечисленные шаги, то это ничего не даст в лучшем случае, и "уронит" обе БД в худшем (и наиболее вероятном).
    проблемы начинаются с этого шага: "потом средствами OS перенести файл (именно файл)". во-первых, партиция - это не файл, а набор файлов в общем случае (файлов может быть более одного). во-вторых, файлы таблицы-партиции не самодостаточны, в частности, описание самой таблицы-партиции находится в pg_catalog вместе с другими таблицами и неотделимо от них на уровне работы с файловой системой.
    так что вам надо смотреть в сторону тех способов миграции данных, которые имеются в документации: снятия и восстановления дампа таблицы-партиции, либо же написания своего кода по миграции данных.
    Ответ написан
    Комментировать
  • Не выполняются команды после подключения к БД в 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 комментария