@pgsql

Страница 942 из 1062
Tolya
17.08.2018
14:47:38
похоже на баг, в общем у меня тоже воспроизводится такое поведение

Yaroslav
17.08.2018
14:47:52
к сожалению, не сработало
А у меня: --exclude-table-data=schema.sequence вроде работает... А Вы как пробовали?

Tolya
17.08.2018
14:50:08
pg_dump -d testdb -U reader -t test_json -f /tmp/test.dump вот такое в лоб не работает

pg_dump -d test -U reader -t test_json --exclude-table-data=test_json_id_seq -f /tmp/test.dump работает нормально

Google
Tolya
17.08.2018
15:05:35
только при восстановлении из дампа поедет последовательность в serial поле (точнее с 1 опять начнется)

Alexey
17.08.2018
15:33:12
Всем привет. Подскажите пожалуйста. По какой причине не отрабатывает команда select * from pg_reload_conf(); после alter system set port to '54433' ; Т.е. postgres=# select * from pg_reload_conf(); pg_reload_conf ---------------- t (1 row) Пишет что все хорошо. Но когда я делаю show port; у меня выводится старое значение. Т,е. сервер не перечитал конфу. НО, если выйти из psql и через консоль linux перезапустить postgres, то все перезачитывается. В чем может быть косяк?

Darafei
17.08.2018
15:34:03
некоторые параметры, например порт, можно менять только перезапуском, об этом написано в документации

Darafei
17.08.2018
15:49:50
любой от планировщика, work_mem например

Alexey
17.08.2018
15:52:02
Как думаете, можно ли создавая контейнер postgres подсунуть ему db_dump.tar.gz и выполнить pg_restore . Чтобы при запуске контейнера там была нужная база.

Darafei
17.08.2018
16:01:32
да даже в стандартном постгресовом докере есть место, куда дампы для разворачивания складывать

Anton
18.08.2018
04:04:10
А непрерывный бэкап можно сделать только репликацией или есть какой то способ еще?

Google
Anton
18.08.2018
04:05:39
Имеется ввиду возможность восстанавливать состояние базы на определенный момент времени. Типо снапшота.

То есть сделал снапшот, а потом например на определенное состояние pg_dump /restore такое можно?

Mike Chuguniy
18.08.2018
04:27:01
@antihaos pg_basebackup+WAL-ы

Anton
18.08.2018
04:27:35
Да. Спасибо.

Kirill
18.08.2018
04:27:52
А непрерывный бэкап можно сделать только репликацией или есть какой то способ еще?
В "ваш" бекап прилетит дроп с мастера и тю-тю;) https://postgrespro.ru/docs/postgrespro/10/continuous-archiving.html

Игорь
18.08.2018
05:29:05
и как еще собирать wal кроме архивной команды или репликации

Jakhongir
18.08.2018
10:05:06
Добрый день, какой шаблон лучше использовать для хранения вложенного меню (в магазине), вложенные множества или использовать столбец parent_id?

elfiki
18.08.2018
10:56:40
nested sets

Terminator
18.08.2018
17:07:43
@Stitchpunk будет жить. Поприветствуем!

Yukari
18.08.2018
17:26:36
Подскажите, постгре умеет сам нарезать партиции по полю с датой? Или это ручной процесс?

Или может есть какой то пакет, типа dbatools, который за этим бы следил

Terminator
18.08.2018
18:01:20
@real_communistic_manifesto будет жить. Поприветствуем!

Jakhongir
18.08.2018
18:02:25
( благодарю ;) )

Айтуар
18.08.2018
18:20:37
Dima
18.08.2018
19:34:49
А как себя показывает постгрес, как NoSQL субд?

Volodymyr Kostyrko
18.08.2018
19:35:20
Либы косые. А так норм.

Воткнул пг+бакардо в прод вместо монги - живёт.

Terminator
18.08.2018
19:39:00
@xMrArt будет жить. Поприветствуем!

Google
Айтуар
18.08.2018
19:53:02
А как себя показывает постгрес, как NoSQL субд?
А зачем? Хочется иметь всё в одном?

Dima
18.08.2018
19:55:12
Айтуар
18.08.2018
19:56:39
Как показывает практика- нельзя усидеть на всех стульях сразу. Придётся чём-то пожертвовать.

Айтуар
18.08.2018
19:59:13
А как себя показывает постгрес, как NoSQL субд?
Кстати, а что по nosql подразумеваешь?

Fike
18.08.2018
19:59:23
я бы все-таки очертил тот функционал, который вы ищете и подразумеваете под словом nosql, так как от этого зависят ответы

Mike Chuguniy
18.08.2018
21:08:59
я ничего не ищу, пока) просто интересуюсь
Ну так поинтересуйтесь для начала, что такое управление (ТАУ, да, и прочие безобразия, грустные для любителей чем-то жертвовать, ага). И как этот термин натягивается на СУБД. А потом попробуйте натянуть сие понятие на известные вам носкули. Будет весело, точно говорю.

Anton
19.08.2018
06:02:50
Я вот читаю информацию по кластеризации pg и тут чат уже продолжительное время и так и не определился, что за решение в качестве балансировщика master-slave кластера чаще используют?

Konstantin
19.08.2018
06:16:45
Я вот читаю информацию по кластеризации pg и тут чат уже продолжительное время и так и не определился, что за решение в качестве балансировщика master-slave кластера чаще используют?
В классическом master-slave кластре на репликах можно выполнять только read-only запросы. И то с осторожностью. Даже при синхронной репликации можно не увидеть своих собственных изменений (закоммиченных киентом до этого). В 10-ке появились способы этого избежать: либо ждать от реплики подверждения того, что транзакция применилась, либо убедится, что своя транзакция закоммичена (чтобы соблюсти причинно-следственную связь). Соответсвенно либо отделение мух от котлет (read-only и read-write запросов) должно делаться самим приложением (которое также может гарантироваать причинно-следствнную связь). Либо это долден делать кто-то ещё. Сейчас это с грехом пополам умеет делать только pgpool. Но он не умеет пулить коннекшины. Соответственно приходится использовать связку pgpool+pgbouncer. Ну и есть ещё мультимастер (у нас в PgProEE есть). Одно из его основных преимуществ как раз заключается в том,. что на любом узле можно выполнять любые запросы. Соответвенно тут load balancing может делаться гораздо проще - случйным или round-robin разбрасыванием запросов по узлам. Правдо надо заметить, что масштабировааться мультимастер будет только на транзакциях с преимущественно read-only запросами. Write маштабирование требует шардинга. Он тоже есть у нас - pg_shardman. Тут запрос отправляется на люьой узел,. а потом переадрисуется на нужный шард(ы).

Андрей
19.08.2018
06:17:41
Добрый день. Может быть у кого-нибудь есть идеи куда копнуть. Django 2.1. Использую ltree. На локале миграция заводится без проблем. Заливаю на хостинг - django говорит при миграции: django.db.utils.ProgrammingError: type "ltree" does not exist На хостинге создаю бд и экстеншн аналогично тому как делаю это на локале. sudo -u postgres psql -c "create user $(whoami);" sudo -u postgres psql -c "alter user $(whoami) createdb;" sudo -u postgres psql -c "create database test_db with owner $(whoami);" sudo -u postgres psql -d template1 -c 'create extension ltree;' При выполнении select * from pg_available_extensions; ltree есть в списке.

Taras ?
19.08.2018
06:38:29
версия постгреса точно та же? я создаю чуть по-другому, возможно это и не имеет значения sudo -u postgres psql CREATE DATABASE test_database; CREATE USER test_user WITH password 'qwerty'; GRANT ALL privileges ON DATABASE test_database TO test_user; ALTER USER test_user SUPERUSER; \connect test_database; CREATE EXTENSION ltree;

ах да, помню на версии 9.5 было дело на одном серваке не хотели ставиться решилось так — sudo apt-get install postgresql-contrib-9.5 # if error with create extensions

Андрей
19.08.2018
06:45:44
Да, версии были аналогичные. Вопрос решился выполнением на хостинге: sudo -u postgres psql test_db CREATE EXTENSION ltree;

Yaroslav
19.08.2018
09:00:51
В классическом master-slave кластре на репликах можно выполнять только read-only запросы. И то с осторожностью. Даже при синхронной репликации можно не увидеть своих собственных изменений (закоммиченных киентом до этого). В 10-ке появились способы этого избежать: либо ждать от реплики подверждения того, что транзакция применилась, либо убедится, что своя транзакция закоммичена (чтобы соблюсти причинно-следственную связь). Соответсвенно либо отделение мух от котлет (read-only и read-write запросов) должно делаться самим приложением (которое также может гарантироваать причинно-следствнную связь). Либо это долден делать кто-то ещё. Сейчас это с грехом пополам умеет делать только pgpool. Но он не умеет пулить коннекшины. Соответственно приходится использовать связку pgpool+pgbouncer. Ну и есть ещё мультимастер (у нас в PgProEE есть). Одно из его основных преимуществ как раз заключается в том,. что на любом узле можно выполнять любые запросы. Соответвенно тут load balancing может делаться гораздо проще - случйным или round-robin разбрасыванием запросов по узлам. Правдо надо заметить, что масштабировааться мультимастер будет только на транзакциях с преимущественно read-only запросами. Write маштабирование требует шардинга. Он тоже есть у нас - pg_shardman. Тут запрос отправляется на люьой узел,. а потом переадрисуется на нужный шард(ы).
А что именно в 10-ке появилось по этому поводу?

Я вот читаю информацию по кластеризации pg и тут чат уже продолжительное время и так и не определился, что за решение в качестве балансировщика master-slave кластера чаще используют?
В дополнение к тому, что написал @knizhnik, учтите вот что: Если Вам нужна именно full-ACID master-slave репликация, то: . Придётся "вручную" управлять транзакциями на master (RC + FOR UPDATE). . Для надёжности Вам потребуется синхронная репликация с несколькими standby, следовательно, придётся подумать и о сопутствующем снижении производительности. Далее, разделять connections на read/only и read/write в приложении — это best practice в данном случае (потому что другие решения — это именно что "с грехом пополам"). И ещё такой совет — осторожнее с мультимастерами. Мне кажется, что нередко поставщики таких решений "забывают" описывать конкретные предоставляемые гарантии надёжности и доступности (особенно в общих описаниях), поэтому, если Вам это важно, нужно разбираться/проверять при выборе решения.

Anton
19.08.2018
09:17:18
Получается опять все сводится к тому, чтобы строить конкретное решение для себя. :(

Sergey
19.08.2018
09:18:15
А что именно в 10-ке появилось по этому поводу?
удваиваю вопрос) сейчас для проверки того, что слейв догнал текущее состояние мастера, приложение использует такой хак: select extract('epoch' from now()) * 100000 // один раз на мастере select extract('epoch' from pg_last_xact_replay_timestamp()) * 100000 // на слейвах, раз в несколько миллисекунд, пока значение не сравняется или не превысит значение с мастера если в 10 появилось решение "из коробки" для синхронизации слейвов при асинхронной репликации, это будет отличным аргументом для апгрейда с 9.6 )

Anton
19.08.2018
09:18:21
То есть реально такая схема в целом самая надежная: master-slave + в приложении делить write/read

Google
Yaroslav
19.08.2018
09:20:25
То есть реально такая схема в целом самая надежная: master-slave + в приложении делить write/read
Смотря что Вы имеете в виду под словом "надёжная". ;) (Лучшее, что сейчас Вам может дать PostgreSQL на данный момент в плане ACID, я описал выше.)

Subb98
19.08.2018
09:30:42
добрый день. кто использует двухфакторную аутентификацию на гитлаб, у вас она работает? мне пришлось войти с помощью резервного кода и отключить её, когда программа перестала принимать пин-коды. сейчас хочу добавить и сканирую штрих-код, ввожу пин-код - снова не принимает. ввожу ключ вручную - эффект тот же.

Sergey
19.08.2018
09:42:29
Так это у Вас асинхронная репликация, так что использование таких штук всё равно даёт Вам ориентировочную информацию... (Разве что у Вас есть относительно большие периоды без write-нагрузки на master.) > пока значение не сравняется или не превысит значение с мастера А для чего Вы это используете?
один из кейсов: интерфейс веб-приложения ставит фоновый таск (условно считаем, что это insert в таблицу tasks), возвращает его ID в ответе. А дальше страница по таймеру опрашивает готовность этого таска по ID. При этом интерфейс начинает работать с мастером, если не удалось выбрать "не сильно отставший" слейв (по захардкоженному порогу разницы во времени, полученному от запросов выше), либо потребовалось открыть транзакцию или совершить запрос, предполагающий запись. Без такой синхронизации иногда выпадали ошибки о том, что таска с таким id не существует, т.к. данные еще не успевали дойти до выбранного слейва (в периоды интенсивной нагрузки). Еще в коде есть коммент на тему, что ранее для синхронизации использовались pg_current_xlog_location/pg_last_xlog_replay_location, но все равно допускали подобные гонки, поэтому были заменены на сравнение по времени.

Yaroslav
19.08.2018
09:48:09
один из кейсов: интерфейс веб-приложения ставит фоновый таск (условно считаем, что это insert в таблицу tasks), возвращает его ID в ответе. А дальше страница по таймеру опрашивает готовность этого таска по ID. При этом интерфейс начинает работать с мастером, если не удалось выбрать "не сильно отставший" слейв (по захардкоженному порогу разницы во времени, полученному от запросов выше), либо потребовалось открыть транзакцию или совершить запрос, предполагающий запись. Без такой синхронизации иногда выпадали ошибки о том, что таска с таким id не существует, т.к. данные еще не успевали дойти до выбранного слейва (в периоды интенсивной нагрузки). Еще в коде есть коммент на тему, что ранее для синхронизации использовались pg_current_xlog_location/pg_last_xlog_replay_location, но все равно допускали подобные гонки, поэтому были заменены на сравнение по времени.
Понятно. А не легче было бы просто обрабатывать ситуацию отсутствия task? И, всё же, мне тоже интересно, о чём именно писал Константин. ;)

Sergey
19.08.2018
10:21:40
Понятно. А не легче было бы просто обрабатывать ситуацию отсутствия task? И, всё же, мне тоже интересно, о чём именно писал Константин. ;)
Конкретно в этом кейсе так и можно было поступить, но есть еще сценарии, когда объект не добавляется, а апдейтится. Как один из примеров - ставится таск на обновление данных по сущности от внешнего API, и после его завершения нужно эти данные получить. Собственно под эту задачу такой синхрон и делали, а потом распространили на описанную выше ситуацию, т.к. уже был готовый костыль. Но большей части запросов такая синхронизация не нужна, поэтому делать репликацию синхронной непрактично. Еще важный момент - в системе не бывает ситуации, когда на мастере длительное время нет транзакций (бэкэнд непрерывно генерит много мелких апдейтов), поэтому счетчик pg_last_xact_replay_timestamp() никогда не залипает.

Yaroslav
19.08.2018
10:34:57
Конкретно в этом кейсе так и можно было поступить, но есть еще сценарии, когда объект не добавляется, а апдейтится. Как один из примеров - ставится таск на обновление данных по сущности от внешнего API, и после его завершения нужно эти данные получить. Собственно под эту задачу такой синхрон и делали, а потом распространили на описанную выше ситуацию, т.к. уже был готовый костыль. Но большей части запросов такая синхронизация не нужна, поэтому делать репликацию синхронной непрактично. Еще важный момент - в системе не бывает ситуации, когда на мастере длительное время нет транзакций (бэкэнд непрерывно генерит много мелких апдейтов), поэтому счетчик pg_last_xact_replay_timestamp() никогда не залипает.
Опять-таки, почему просто не ждать, пока статус task не изменится на нужный? Кроме того, тут ещё зависит от того, зачем (с какой целью) эти данные нужно получить. Я к тому, что в зависимости от конкретной архитектуры репликации и приложения, могут быть неприятные крайние случаи.

Anatoly
19.08.2018
11:03:50
добрый день. у нас стали подвисать запросы и лететь ошибки вида "failed to find parent tuple" и тому подобное. пробовали сделать reindex, но он тоже упал с "failed to find parent tuple". Единственное, что гуглится это "снимите дамп и перенакатите", но дамп не может забэкапить одну таблицу. может есть еще какие-то способы?

Anatoly
19.08.2018
11:30:57
инфраструктурщики говорят, что были проблемы со стораджем

бэкапы не делались и алармы на это не заметили

все бэкапы уже с проблемами

пока удалось сделать pg_dump с таблиц, кроме одной.

Yaroslav
19.08.2018
11:34:57
Значит, у Вас уже битые данные, и что-то Вы почти наверняка потеряете (или какого-нибудь "мусора" найдёте). :( Но общее направление действий верное — добиться снятия дампа, снести/переинициализировать кластер, накатить дамп (если получится, если нет — накатывать частями/вручную), потом печально разбираться, чего не хватает/лишнее/не так.

инфраструктурщики говорят, что были проблемы со стораджем
А как так вышло, что Вы этого не заметили?

Anatoly
19.08.2018
11:37:08
слоев много, слои не всегда говорят про свои проблемы) в прошлый раз проблема со стораджем вскрылась постфактум) впрочем, как и сейчас.

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

а потом раскрутили уже до того, что в базе что-то не то)

Google
Anatoly
19.08.2018
11:38:50
кстати да. без.

контрольные суммы все висят в бэклоге и их не включили пока.

видимо, стоит повысить им приоритет)

Yaroslav
19.08.2018
11:40:07
кстати да. без.
Ну-ну. Не делайте так никогда (впрочем, Вы уже убедились, я думаю). Ладно, а что у Вас сейчас есть и в каком состоянии? База стоит? Файловая копия есть?

Anatoly
19.08.2018
11:41:56
файловые копии есть. база включена снова, сняли дамп, дропнули базу и создаем снова из дампа. реинит не делали пока.

Yaroslav
19.08.2018
11:42:47
Впрочем, неважно — в любом случае, кластер надо будет сносить.

Konstantin
19.08.2018
11:48:31
А что именно в 10-ке появилось по этому поводу?
Сорри, это появилось не в 10,. а в 9.6: https://paquier.xyz/postgresql-2/postgres-9-6-feature-highlight-remote-apply/ 1. Можно установить synchronous_commit=remote_apply тогда мастер будет жадть пока транзакция не применится на реплике: https://www.postgresql.org/docs/current/static/warm-standby.html#SYNCHRONOUS-REPLICATION 2. causal reads: дождаться пока конкретная тарнзакция не примемнится на реплике

Страница 942 из 1062