Задать вопрос
  • Как перенести дамп базы данных с Ubuntu на Windows?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    К каким бы то ни было паролям базы источника отношения не имеет.
    Вопрос исключительно к настройке вашей базы в этом экзотическом окружении windows.

    Во-первых неясно пароль какого пользователя запрашивается?

    Того, к которому вы сказали подключиться psql. Поскольку вы не указали соответствующий ключ -U и, скорей всего, не определили переменную окружения - то psql пытается использовать имя пользователя аналогичное имени пользователю открытой консоли.

    Ошибка прямым текстом говорил, что была использована парольная аутентификация, в результате пользователя с таким паролем в базе не оказалось. Разберитесь как авторизоваться в базе в вашей системе, к дампам отношения не имеет никакого.
    Ответ написан
    4 комментария
  • Сколько жетских дисков потребуется?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Хранилище чего именно? Я без проблем могу себе представить нагруженную СУБД на 10Тб (и немного за 20Тб сырой ёмкости накопителей), которая не взлетит на HDD вообще как раз из-за требований к времени доступа и все эти 20Тб набраны серверными SSD.
    И могу себе ещё более легко представить хранилище на 10тб под бекапы, где производительность должна быть просто достаточной за разумное время положить новый бекап или прочитать нужный при аварии, для чего достаточно raid5 или 6, а может дешевле окажется и вовсе пара 10тб дисков, надо с прайсом уже смотреть.

    Сначала задачи, ограничения применения, пределы дальнейшего расширения, бюджет на всю хранилку - и только потом сколько надо будет заказать дисков.
    Для хранения 10тб информации необходим хотя бы один накопитель (задача может сказать, что диск резервировать не нужно, такое тоже бывает). Всё остальное выбирается под конкретику.
    Ответ написан
    4 комментария
  • PHP PDO Как добиться синхронной работы COMMIT?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Для приложения commit синхронен. Если вы вышли из commit() - значит транзакция уже зафиксирована.

    Проверяйте код приложения #2. Может быть вы уже в транзакции и потому не видите изменения. Может быть вы подключаетесь к асинхронной реплике
    Ответ написан
    5 комментариев
  • Как сделать синоним для таблиц в другой БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В пределах одного сервера СУБД - сделайте view. При наличии прав у пользователя к другим БД этого же самого хоста обращаться может.
    На другой сервер - насколько мне известно невозможно.
    Ответ написан
    2 комментария
  • Работа коммутатора в сети. Как проходят запросы от рабочей станции до другого коммутатора?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В коммутаторах есть MAC-таблица, которую он составляет при первоначальном подключении в сеть, рассылая запросы...

    Неверно полностью.

    Кратко алгоритм:
    - коммутатор получает пакет на порту
    - заносит mac отправителя в таблицу адресов, ассоциируя таким образом mac и физический порт, к которому подключено устройство
    - проверяет, есть ли mac получателя пакета в таблице
    - если есть - отправляет пакет только в этот порт
    - если нет - отправляет на все порты кроме того, откуда пакет пришёл

    Из таблицы вычищаются адреса, от которых не было пакетов в течении определённого времени (в настройках коммутатора если такие такая, типично 5 минут)
    Ответ написан
    5 комментариев
  • Какую утилиту лучше использовать для реорганизации таблиц PostgreSQL (например: pg_repack vs pgcompactor vs подстройка автовакума)?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    pg_repack - это community extension, форк более раннего pg_reorg. И не отрицая вклад участников pgpro в разработку postgresql в целом - я не вижу их среди контрибьютеров pg_repack.

    Мы активно используем обе. Основные моменты касательно pg_repack vs pgcompacttable в общем-то именно я и изложил в README компактора. Если говорить на русском:
    - pg_repack делает копию таблицы, т.е. требуется двукратный запас диска. Компактор работает в рамках одной таблицы и требует место только под копию наиболее толстого индекса и то, толстые индексы обрабатываются самыми последними. Т.е. расчёт на работу когда места уже мало.
    - компактор намеренно выполняется медленно чтобы не задевать работающий проект
    - компактор не может обрабатывать toast таблицы. Репак - может.
    - pg_repack характеризуется очень заметными пиками io и wal. Вся таблица едет одной транзакцией и это никак не регулируется. Поэтому может аффектить прод на неважных дисках и в том числе оторвать реплики при недостатке сетевой полосы.
    - pg_repack умеет перемещать между tablespace и может делать команду cluster

    (или лучше подстроить автовакум)?

    Конечно необходимо настроить автовакуум и не мешать ему работать - т.е. исключить долгие транзакции. Но всё равно бывают хитрые моменты, когда репак или компактор бывают нужны.
    Ответ написан
    2 комментария
  • Как вы измеряете профиль нагрузки (соотношение кол-ва чтений/кол-ву записей) в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Посмотрите в циферки что собирает stats collector, их много разных. https://www.postgresql.org/docs/10/static/monitori...
    например, запись буферов на диски - это buffers_checkpoint, buffers_clean и buffers_backend в pg_stat_bgwriter
    pg_stat_database c blks_read, blks_hit, blk_read_time и blk_write_time

    И разумеется pg_stat_statements с детализацией ресурсов по отдельным запросам.

    Вот кстати, хорошая картинка куда смотреть за детализацией каких подсистем базы
    postgres-observability-9.6.png
    Ответ написан
  • TINYINT vs ENUM: в ситуации, когда возможных целочисленных значений всего несколько?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Enum с числовыми полями работает описанным в мануале способом, но этот способ... Скажем так, иногда вызывает удивление.

    mysql> create temporary table speedlimit (i int, lim ENUM('20', '30', '40', '50', '60'));
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> insert into speedlimit values (1, 60);
    Query OK, 1 row affected, 1 warning (0.04 sec)
    
    mysql> insert into speedlimit values (2, 5);
    Query OK, 1 row affected (0.04 sec)
    
    mysql> insert into speedlimit values (3, '60');
    Query OK, 1 row affected (0.04 sec)
    
    mysql> select * from speedlimit;
    +------+------+
    | i    | lim  |
    +------+------+
    |    1 |      |
    |    2 | 60   |
    |    3 | 60   |
    +------+------+
    4 rows in set (0.00 sec)
    
    mysql> select * from speedlimit where lim > 20;
    Empty set (0.00 sec)
    
    mysql> select * from speedlimit where lim > '20';
    +------+------+
    | i    | lim  |
    +------+------+
    |    2 | 60   |
    |    3 | 60   |
    +------+------+
    2 rows in set (0.00 sec)


    Если вы понимаете, почему поведение именно такое и знаете, что это поведение не будет удивлять других разработчиков - можно использовать. По размеру enum до 255 значений занимает 1 байт, как и tinyint. Но я не рекомендую использовать enum с числовыми значениями.
    Ответ написан
    6 комментариев
  • Как организовать базу дневных температур в mysql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Общее правило - сначала нормальная форма, потом денормализация. Не наоборот.

    Возможно лучше вовсе time-series базы посмотреть.
    Ответ написан
    2 комментария
  • Почему не работает LIMIT в этом подготовленном запросе?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    limit можно передавать параметром. Проблема в комбинации двух фактов:
    1) эмуляция prepared statements в pdo дефолтно передаёт строки
    2) парсер mysql утверждает, что limit обязан быть числом

    Поэтому необходимо исправить один любой из этих нюансов:
    1) указать тип параметра явно:
    $q = $dbh->prepare("select ... limit :limit");
    $q->bindValue(':limit', 10, PDO::PARAM_INT);
    $q->execute();

    2) либо отключить эмуляцию prepared statements: PDO::ATTR_EMULATE_PREPARES => false в настройках соединения.
    Ответ написан
    1 комментарий
  • Как перенести данные из Postgres в Mysql?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Если у вас в дампе только insert'ы (и именно они, а не copy; например после pg_dump --inserts --data-only) - то попробуйте импортировать в mysql как есть.
    Возможно sql_mode надо будет подправить в ANSI quotes, а данные вроде корректно переезжают.

    Ну или сделать дампы в csv - команды copy в postgresql и load data infile в mysql.
    Ответ написан
    Комментировать
  • Как получить от PostgreSQL массив данных сразу в Json формате для Symfony?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    В postgresql есть штатная агреггирующая функция json_agg. Поэтому возможно даже без привлечения хранимок.
    Ответ написан
    6 комментариев
  • Куда подключать спикер на этой мамке Intel D945GCLF2D?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не предусмотрено конструктивно.
    https://www.intel.com/content/dam/support/us/en/do...
    These beep codes can be heard through a speaker attached to the board’s line out jack

    Сигналы POST выводятся на line-out аудиоразъём.
    Ответ написан
    Комментировать
  • Как написать функцию итератор?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Это называется не итератором.

    insert into terms (term, freq) values (?, 1) on conflict (term) do update freq = excluded.freq + 1 returning freq;

    В функцию завернуть по желанию. 9.5+
    Ответ написан
    Комментировать
  • Как отследить почему падает MySQL too many connections?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Не падает, а отказывается принимать новые соединения из-за исчерпания указанного в конфиге лимита max_connections.
    Есть отдельная страничка в мануале

    Для mysql коннекты не такие тяжёлые относительно того же postgresql и max_connections вполне можно увеличивать.
    Какие коннекты открыты и откуда можно посмотреть в show processlist
    Ответ написан
    2 комментария
  • Почему не выводит строки при корректном запросе postgre?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    А с кавычками выводит "ничего" т.е. ноль полей.

    С какими именно?

    user='40'
    'user'='40'
    "user"='40'

    Это три абсолютно различных условия, выполняющих совершенно разные вещи.

    user - зарезервированное слово по требованию стандарта. По стандарту не уверен что обозначает в контексте where, надо искать (может как часть create user и подобных только зарезервирован), а в postgresql обозначает имя текущего пользователя. Имеет тип name, что и провоцирует ошибку.
    Т.е. первое условие в принципе не имеет никакого отношения к каким-либо пользовательским таблицам.

    'user' - просто текстовая константа. Никто не мешает в условии сравнивать одну константу с другой, where 1=1 в некоторых query builder отсюда же.

    "user" - обращение к объекту, игнорируя зарезервированные слова. То есть если у вас в таблице proxy есть поле user - то запрос должен быть записан как
    select * from proxy where "user"='40'

    Но общая практика - лучше не надо использовать зарезервированные слова в качестве идентификаторов.
    Ответ написан
    1 комментарий
  • Как обновляют структуру БД и данные на продакшене?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Поскольку вопрос о трансформации имеющихся данных - то индивидуально для каждой задачи.

    Начать необходимо вот отсюда: https://habrahabr.ru/post/146901/
    И, собственно, придти к выводу, что лучше оставить как есть в одном поле. Если в каких-то местах нужны другие формы обращений - прописать их явно, а не конструируя по имеющимся заблуждениям о фио.

    А так:
    0) делается дополнительный бекап
    1) выкатывается alter table добавляющий новый поля
    2) выкатывается приложение, умеющее писать синхронно старую и новую структуру, но читающее только старую
    3) отдельным процессом в цикле небольшими частями преобразуются данные - это если подлежит автоматической обработке
    4) выкатывается приложение использующее только новую структуру
    5) архивируется и удаляется исходная структура

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

    Если тривиальной автоматике обработка не подлежит, то часто вместо 3 пункта делают выгрузку primary key, source_data, как-нибудь изменяют и готовят csv primary key, source_data, new_data, копируют в temporary table, затем делают слияние мультитабличным update этих двух таблиц с recheck'ом по source_data. Затем выгружают данные для которых не было обновления, разбираются, ещё раз обновляют и т.д. до заполнения всего.
    Ответ написан
    2 комментария
  • Какую выставить частоту оперативной памяти?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    CPU-z на вкладке SPD пишет то, что в SPD модуля, а не текущее состояние. Текущее состояние - в memory. А в Max Bandwidth указан максимальный стандартный по JEDEC режим.

    что будет если вставить в сокет К процессор

    Ничего не изменится.

    поэтому интресует вопрос будет с таким процессором память работать на 2400

    Будут, оба процессора.
    XMP профили - интела разработка и есть. В спецификациях интел давно уже занижает режимы памяти относительно поддерживаемых делителей частоты памяти. Де юре - разгон, де факто - автоматическая настройка. Лет 10+ назад попадалась память с отдельной инструкцией мол заявленный режим работы памяти протестирован, но настроить вы его должны сами в BIOS.

    И какую частоту выставить на данный момент? 1600 или 2400?

    Какую хотите.
    Ответ написан
    4 комментария
  • Почему strip_tags обрезает такую строку?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Неужели он не может отличить это <-+KennY+-> от html тега?

    Даже не пытается. Простой state machine

    А зачем вам strip_tags вообще понадобился? Ломать пользовательский ввод вы не должны, вы должны его правильно отобразить. Т.е. делать htmlspecialchars при выводе в html.
    Ответ написан
    Комментировать