Задать вопрос
  • Как правильно изменить месторасположение базы postgresql-9.2.18.rl7?

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

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

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

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    LIMIT 1,1

    Т.е. разрешено два пользователя с одним именем.

    И никогда не подставляйте данные в текст запроса. Используйте prepared statements.

    $arr = array('$login','$tel','$email');

    Без комментариев. Посмотрите, что в переменной записано, удивитесь.
    Ответ написан
    1 комментарий
  • Нужен ли primary key для такого?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    primary key нужен всегда.
    Если по логике вашего приложения одному user_id может соответствовать только один пользователь в каждом service_id - то PK на первые два поля.
    Если несколько - то pk на 3 поля.

    Порядок полей при указании PK таблицы связей важен. Для mysql/innodb очень важен, т.к. таблица кластеризована по PK и любое обращение по вторичному ключу влечёт поиск по PK (кроме покрывающих индексов). Порядок выбирайте исходя из наиболее частых запросов к таблице, чтобы максимум запросов могло идти по первичному ключу.
    Ответ написан
    Комментировать
  • Как замониторить банусер?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Нет, сам postgresql о существовании баунсера вообще не знает. pgbouncer является обычным libpq клиентом с точки зрения базы.
    Ответ написан
  • Быстрее ли несколько параллельных запросов одного последовательного?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Есть ли в распараллеливании запросов рациональное зерно?

    Есть, если треды не дерутся за одно и те же ресурсы. Например, ходят в физически разные кластеры БД.

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

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

    На каком-то этапе параллельные запросы также выстраиваются в очередь.

    Запросто. Но на вашу наблюдаемую картину не похоже, у вас время выполнения работы выросло в несколько раз.
    Значит процессы дрались за ресурсы и очень сильно мешали друг другу.

    Если в то же время подать аналогичные запросы с другого клиента, то время ожидания ещё больше растягивается.

    Что подтверждает диагноз. Ресурсов для параллельного выполнения нет.

    Поскольку вопрос затрагивает субд и вы не называете, что там происходит - самое очевидно - вы упёрлись в диски. Возможно даже в механические диски. Добавление новых io задач на диски ожидаемо и очень сильно замедляет весь остальной io.
    Ответ написан
    2 комментария
  • Как удалить элемента из массива Json по ключу?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    PHP не делает различий между списком и нумерованным списком. Массив json же ключи иметь не может. Поэтому в попытке сохранить ключи массива json_encode делает объект с числовыми ключами. Для получения json array необходимо сбросить ключи массива, например:
    $myArr["features"] = array_values($myArr["features"]);

    перед вызовом json_encode
    Ответ написан
    Комментировать
  • Как реализовать ИЛИ без использования скобок?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какой диалект?
    В PCRE есть группа без запоминания (?:skype|скайп)
    Ответ написан
    2 комментария
  • Doctrine DQL: как выбрать объекты из двух таблиц с разными условиями?

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

    Вывод неверен. Выполняются оба условия, гарантированным seqscan'ом по events, если повезёт то index scan'ом по weekday. А в результате, как в запросе и написано - выборки перемножаются между собой в cross join.

    Если таблицы не связаны и нужен плоский список - то здесь нужен именно union all. Глупая доктрина его не умеет. Возможные методы извращения без union глупая доктрина не умеет тем более.
    Значит или обучать доктрину делать union all (вероятно, нетривиально)
    или делать два запроса (всё равно у вас сейчас seqscan, значит производительность вам не нужна и explain никто не смотрел)
    или делать вьюшку в базе с union all и ходить к ней вместо таблиц (и проверить, умеет ли планировщик каждой из поддерживаемых баз вообще прокидывать условия внешнего запроса во вьюшки с union all)
    или использовать native query с нормальным SQL

    PS: да, я с доктриной работал и именно поэтому её сильно не люблю за ограниченность синтаксиса, при том всё равно с нещадно текущими абстракциями и необходимостью знать и учитывать чем именно каждая поддерживаемая база отличается от других. И нафига эта доктрина тогда вообще жрёт столько cpu и памяти?
    Ответ написан
    4 комментария
  • Как увеличить размер / в Ubuntu 16 server?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Судя по характерному имени блочного устройства - у вас система стоит на LVM.
    Соответственно помимо увеличения блочного устройства и расширения ФС необходимо сказать LVM, что блочное устройство стало побольше и сказать увеличить логический том.
    pvresize /dev/sda5
    lvextend -l +100%FREE /dev/mapper/ubuntu--vg-root

    Затем уже resize2fs
    Ответ написан
    1 комментарий
  • Как написать бесконечный по времени sql запрос?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    select sleep(столькосекундскольконравится);

    Плюс см https://dev.mysql.com/doc/refman/5.7/en/server-sys...
    Ответ написан
    Комментировать
  • Почему тормозит видео html5, flash в debian 7 с radeon HD 4850?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Обновляйтесь на актуальный релиз дебиана. Открытый radeon драйвер 2012 года и 2017 - две очень огромных разницы.

    Или ставьте проприетарный. Не уверен только, который. В описании fglrx в пакетах дебиана уже не говорится про 4ххх серию, но вроде бы поддержка 4ххх была до 13.1 драйвера. Если не запустится, то пробовать ставить fglrx-legacy-driver из бекпортов)
    Ответ написан
  • Необходим поменять формат времени в запросе, как?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    формат времени с mysql на postgresql

    done by sql design.
    Форматы даты, времени, датывремени эквиваленты. И, емнип, вовсе стандартны для SQL в целом.
    Если вы пихаете данные в неподходящий тип данных вместо штатного для обеих субд timestamp - то вас будут ждать сюрпризы рано или поздно. Это как бы само собой разумеется.

    Если ваш clock, как очевидно по комментарию в другом ответе, int4 является количеством секунд с начала этой эпохи, то привести unixtime к циферке-количеству-секунд-этой-эпохи можно через extract:
    hs.clock > extract(epoch from timestamp 'yesterday')

    Привести циферку количества секунд в этой эпохе к timestamp можно функцией to_timestamp.
    Ответ написан
    2 комментария
  • Как решить 1215, 'Cannot add foreign key constraint'?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Детали неудачного создания FK надо смотреть в innodb status, вы всё верно прикрепили в вопросу.
    Встречный вопрос вам: что именно в объяснении английским по цвету вашего терминала непонятно написано:
    Cannot find an index in the referenced table where the
    referenced columns appear as the first columns, or column types
    in the table and the referenced table do not match for constraint.

    ? На target таблице нет подходящего индекса для работы FK.
    Судя по названиям - где вы продолбали primary key?

    Ну и, конечно, нафига вам 4 одинаковых FK? На всякий случай?
    Ответ написан
    Комментировать
  • Как можно реализовать изменение значения в ячейке бд (Mysql) через N-ый промежуток времени?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    payed_until timestamp default null
    Если null либо в прошлом - значит срок оплаты прошёл. Если в будущем - значит оплата была.
    Ответ написан
    Комментировать
  • Как мне отсортировать кверисет?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какой запрос идёт в базу в результате?
    Если не указано никакого order by - то порядок записей в результате запроса любой. В смысле действительно любой, СУБД может даже на каждый запрос возвращать данные в разном порядке и это именно то, что сказано в стандарте SQL.
    Ответ написан
    Комментировать
  • Почему всё же $_SERVER['REMOTE_ADDR'] отдает 127.0.0.1 на локали и как это побороть?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вы, видимо, будете крайне удивлены, но - с чего вы решили, что у хоста вообще может быть только один IP?
    Хоть несколько сотен адресов на каждом сетевом интерфейсе.

    И чем вам не нравится 127.0.0.1? 127.0.0.1 - отличный адрес. Он есть чуть менее чем у каждого хоста. Помимо него у каждого же хоста может быть любое число других сетевых адресов. В том числе из более чем обширной сети 127.0.0.0/8 - вся эта орава является локальными адресами.

    И это только для ipv4, и даже без учёта трансляции адресов. Для ipv6 by design существует множество адресов на всех интерфейсах.
    Ответ написан
    3 комментария
  • Как можно упростить mysql запрос?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Начните изучать булеву логику.
    (a and x) or (b and x) or (c and x) === x and (a or b or c)
    Ответ написан
    Комментировать
  • Как нарисовать цикл в блок схеме запроса к БД?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    mysql-arc.JPG
    Вот так вкратце исполняется запрос в mysql.
    Циклов внутри много.
    Ответ написан
  • Как выгрузить из бэкапа нескольких БД одну необходимую?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Как выгрузить из бэкапа нескольких БД одну необходимую?

    бэкап всех БД - all_databases.sql

    Никак.
    Либо идти руками и текстовым редактором доставать именно нужное.

    -U - существующий в postgresql пользователь, от имени которого можно зайти сейчас. А не после разворачивания бекапа. Для бекапа всего кластера очевидно понадобится суперпользователь, postgres или pgsql обычно.
    -d имя базы данных, а не таблицы. База так же должна уже существовать, чтобы можно было подключиться к pg.
    Ответ написан