Задать вопрос
  • Как скопировать запросы,которые делает программа к Postgres sql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Помимо log_statement = 'all' можно выставить настройку log_min_duration_statement в 0 - она тоже может логировать все запросы.

    Если запросов через базу проходит много не только от необходимой программы, то и log_statement и log_min_duration_statement возможно выставить только для пользователя, от имени котрого программа выполняет запросы. Например,
    alter user melkij set log_min_duration_statement = 0;
    Ответ написан
    1 комментарий
  • Как перенести большой объем файлов с одного диска на другой?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    rsync. Старый проверенный админский молоток.
    0) Монтируете оба диска
    1) делаете rsync
    2) повторяете команду выше до тех пор, пока время работы не придёт к какому-то допустимому промежутку
    3) закрываете работу с файлами, старый диск лучше перемонтировать в ro
    4) ещё один rsync
    5) отмонтируете старый диск, перемонтируете новый на место старого
    6) открываете работу с файлами обратно

    На случай дальнейшего расширения дисков - поставьте поверх нового диска LVM. Если на старом диске уже есть LVM - то штатные pvinit, vgextend, pvmove, lvresize, vgreduce, pvremove, resizefs
    Если у вас всё-таки сервер, то выясните какой стоит raid. Для программного linux raid можно доставить диски большей ёмкости без даунтайма.
    Ответ написан
    4 комментария
  • Как выбрать id для которых в таблице есть только одна запись?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select goods_id from tablename where goods_id in (?) group by goods_id having count(*)=1
    Ответ написан
  • Почему if в PHP выдает неверный результат, когда он внутри foreach()?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Упрощайте.
    Foreach ни при чём. Обычные фокусы приведения типов.
    var_dump('L' == 'F', 0 == 2, 0 == 'F', 'F' == 0, (int) 'F', '0' == 'F', 'F' == '0');

    Не число приводится к строке и сравнивается, а строка приводится к числу. F не является числом, поэтому приводится к 0. 0 равен 0? Да, такое условие истинно.

    Сравнение с учётом типов - $op1 === $op2
    Ответ написан
    Комментировать
  • Какие книги прочитать по лучшим практикам проектирования БД?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Bill Karwin SQL Antipatterns
    В общем-то, в духе рефакторинга как раз: как делают часто неправильно, почему это плохо (но когда и адекватно для задачи) и как сделать лучше.
    Ответ написан
    1 комментарий
  • 100% использование памяти в Debian 8 + VestaCP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Внимательнее на то, как именно занята. Приложениями или используется всего.
    Потому что linuxatemyram.ru
    Ответ написан
    1 комментарий
  • Почему просит GET метод при обновлении записи?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Обратите внимание, что в HTML нет method PUT.
    https://www.w3.org/TR/html5/forms.html#attr-fs-method
    The invalid value default for these attributes is the GET state.


    То есть прежде чем искать ошибку на бекенде - посмотрите сначала, какой именно запрос отправляет клиент.
    Ответ написан
    Комментировать
  • Как подключать классы в рантайме в PHP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Раз они однотипные - то может и задачу они решают однотипную?
    Может, вам нужен паттерн factory и в контроллере и будет только use фабрики?
    Ответ написан
    Комментировать
  • Что почитать на досуге?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Конечно, Макконнелл "Совершенный код",
    Мартин "Чистый код"
    "Рефакторинг" Фаулера

    "Приемы объектно-ориентированного проектирования" Э. Гамма

    Поскольку в списке mysql - High Performance MySQL обязателен к прочтению
    Отдельно рекомендую "Регулярные выражения" Дж.Фриддла, отлично вправляет мозг по регуляркам.

    По базам в целом:
    короткая "Architecture of a Database System" J. M. Hellerstein, M. Stonebraker and J. Hamilton расскажет об общих подходах построения СУБД
    Bill Karwin SQL_Antipatterns - как не надо писать SQL. А вот, кстати, отличный материал как надо писать, но не книга: use-the-index-luke.com

    Это всё вполне можно читать в порядке отдыха.

    Фундаментальные, которые уже идут заметно тяжелее:
    "Transactional Information Systems" Weikum, Vossen - монументальная теория транзакционной обработки
    "Алгоритмы. Построение и анализ" Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн - про основные алгоритмы. Всё библиотечное, но полезнейшая весь для понимания обычно скрытой машинерии и для прохождения собеседований.
    Ответ написан
    Комментировать
  • Как добавить через insert values в начало таблицы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    В таблице в sql в принципе нет начала и конца. Есть большая куча строк.
    А порядок в этой куче появляется только когда вы явно указываете order by. Без order by база может возвращать строки в любом порядке, в каком захочет.
    Ответ написан
    2 комментария
  • Как обнулить get параметры?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Сделать редирект куда-нибудь в другое место. Например, на ту же самую страницу, но без параметра в url.
    Ответ написан
    Комментировать
  • Что я делаю не так с Ansible?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    SSH конектится что с сервака на десктоп, так и обратно

    Внимание, вопрос: под каким пользователем?
    Потому что плейбук вы с весьма неясной целью запускаете через sudo. А у рута в таком случае ключи настроены?

    Вообще не надо в /etc/ansible лезть. Заведите себе в любом месте директорию и в ней размещайте всю информацию для ansible. ansible-playbook не нужны рутовые права для своего запуска. Ему нужен только доступ на целевые хосты и возможность орудовать там.
    Ответ написан
    1 комментарий
  • Насколько внешние ключи любят ресурсы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Делать внешние ключи обязательно.
    И уникальные индексы проставлять. Ещё бы check constraint ставить, да у вас глупый mysql в тегах, он такое не умеет.
    Это всё ваши помощники. Они помогают искать ошибки и отлично мешают делать глупости.
    И выбирать подходящие типы данных. Ну и раз у вас mysql - то всенепременно проверить sql_mode и выставить его максимально агрессивным. В 5.7 стало гораздо лучше, до этого из коробки уж слишком много позволял делать глупостей.

    Дорастёте до террабайтной базы как авито - тогда можете начинать думать, а сколько денег нам стоит целостность внешних ключей или дешевле будет периодически проверять целостность скриптами и озадачивать разработчиков. О, кстати, вот запись доклада с pgday15, на 27 минуте как раз начинается обсуждение вопроса из зала "ребята, а вы в своём уме отключать FK?"
    Ответ написан
    5 комментариев
  • Почему далеко не на всех сайтах есть каптча?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Капча лишняя по своему определению. Мешает, раздражает и никак не упрощает жизнь пользователя.
    И лишь вынужденное зло для отсева наиболее глупых ботов.

    Ведь легко можно написать скрипт, какой регистрируется сразу сотню левых аккаунтов на сайте, не успел оглянуться, и бд уже в ботах.

    И пусть. Нормально сделанной базе плюс-минус лям пользователей - не вопрос.

    Тоже самое с комментариями, легко сделать скрипт чтобы оставлял с разных ботов в разных топиках комментарии с рекламой.

    С этим сложнее. Если есть пользовательский контент - то сначала необходимы люди, которые будут его модерировать (не забудьте сделать внятный инструмент модератора для поиска и удаления пачкой комментариев по шаблону). Антиспам автоматика не исключает необходимости в людях, которые будут проверять вручную. Вы видели спам на stackoverflow? А попадается и там.
    И капча, разумеется, не панацея тоже.
    Ответ написан
    2 комментария
  • Как составить запрос для выборки по времени из TIMESTAMP?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Правильно, хех?
    А правильно - включает в себя "чтобы быстро работало"?
    Чтобы работало медленно всегда, но просто:
    where time(timestamp) = '14:30:00'
    Чтобы работало быстро - материализовать time(timestamp) в generated column (5.7, отдельно уточните какая версия нужна для построения индекса по ним) или в отдельное поле типа time (тогда плюс соответственно триггеры для поддержания актуальности данных в поле) и повесить поверх индекс.
    where timestamp_time_field = '14:30:00'
    Ответ написан
  • Можно ли создать raid1 из 2 дисков, если на одном есть данные, не потеряв их?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Массив можно создать в деградировавшем виде:
    mdadm -C /dev/md0 -l 1 -n 2 missing /dev/sdc
    Затем скопировать данные на массив
    rsync sdb -> md0
    И добавить диск в массив
    mdadm /dev/md0 -a /dev/sdb
    Ответ написан
    7 комментариев
  • Как найти вывести список всех не найденных значений из массива?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select children.code is null as is_not_found, /*another children data is null too*/ 
    from unnest(array[...]) as code 
    left join children using(code)
    Ответ написан
    Комментировать
  • Как сделать временную таблицу с одинаковыми данными?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    небольшая ремарка №3: а нафига вам вообще cross join понадобился?
    SELECT 'Economy' FROM generate_series(1,10);
    Ответ написан
    1 комментарий
  • Как понять запрос к MySQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Это то, как НЕ надо делать фильтр, если нужны строки за определённый месяц.
    Потому что mysql не умеет функциональные индексы, значит если даже индекс подходящий по дате есть - использоваться он не будет. Должно быть:
    WHERE f=1 
    AND tab.site_id = '5568' 
    AND user_payment >=  '2016-06-01' 
    AND user_payment <  '2017-07-01'

    Что отлично пойдёт по индексу, например, site_id, user_payment. Надо ли сюда включать f - смотрите ваши данные, вам лучше знать вашу базу.
    Ответ написан
    2 комментария
  • Как правильно изменить месторасположение базы postgresql-9.2.18.rl7?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    С большим даунтаймом, зато целиком на новый диск:
    Потушить базу, скопировать PGDATA (data_directory в конфиге) в новое место, заменить data_directory в конфиге на новое место, запустить базу.
    Можно, кстати, не менять data_directory, а сделать симлинк. Postgresql не против по симлинкам сходить за своими данными.

    С небольшим даунтаймом, зато с чуть большим числом телодвижений:
    через pg_basebackup сделать копию в новом месте, запустить там второй инстанс постреса с репликой. Когда реплика догонит мастер, потушить мастер (сделав checkpoint), потушить реплику (тоже с чекпоинтом), заменить data_directory в конфиге на новое место, запустить базу.

    Без даунтайма:
    инициализировать второй диск как tablespace, перенести на этот tablespace что мешается на основном (pg_repack попробуйте, емнип умеет без пишущего лока даже переносить). Использоваться будут оба диска, что кстати хорошо с точки зрения io.
    Ответ написан
    2 комментария