Ответы пользователя по тегу PostgreSQL
  • Насколько актуален PgQ в 2020 году?

    alekciy
    @alekciy
    Вёбных дел мастер
    Если не ошибаюсь в этом видео https://www.youtube.com/watch?v=HjLnY0aPQZo говорили о том, что не нужно использовать PgQ в наши дни.
    Ответ написан
  • Правильно ли ставить внешние ключи на поле ID?

    alekciy
    @alekciy
    Вёбных дел мастер
    Судя по всему у вас id это суррогатный PK. Есть есть уникальное поле field1, то держать в таблице суррогатный PK имеет смысл только ради удобства человека, в остальном он совершенно не нужен. С таблицей 2 ситуация аналогичная.

    Как правильно организовать связь между таблицами?

    Если один-ко-многим, то поля table1_field1 достаточно.

    Будет ли разница между внешним ключом

    О какой разнице речь? В такой формулировке как у вас, то нет, не будет.

    id - цифровое, а field1 - строковое поле. Это может иметь значение?

    field1 случайно не UUID? В большинстве случаев разницы не будет. Все равно на них вешать индекс.
    Ответ написан
    Комментировать
  • Как отслеживать изменения в СУБД при конкурентной записи?

    alekciy
    @alekciy
    Вёбных дел мастер
    Посмотрите в сторону NOTIFY/LISTEN: https://postgrespro.ru/docs/postgrespro/10/sql-notify
    Ответ написан
    Комментировать
  • В чем основные отличия mySQL от Postgre?

    alekciy
    @alekciy
    Вёбных дел мастер
    Использую обе РСУБД. Предпочитаю Postgresql, хотя конечно начинал с MySQL. Из того, что на практике приводит к такому предпочтению:
    1) Отсутствие проблем на по сути пустом месте. Из последнего было, в одной базе есть таблицы с большим количеством текстовых полей. При вставке в одно из них чуть меньше 200 символов он отказывался ссылаясь на то, что переводите на динамические. И я значит должен начать курить тему движков мускула и выяснять, что мне оказывается нужна Barracuda. При той же InnoDb. Хочется спросить такого черта.
    Или вот еще вспомнил. При попытке записи в поле данных, больше чем это возможно для данной колонки он делает запись тупо обрезав лишнее. И проблему могут не заметить очень долго вплоть до момента когда подниматься из бэкапа поздно, там все уже битое.
    Или вот взять и сменить могут дефолтные значение переменных в рамках минорной версии. База после накатки апдейтов и ребута может просто не подняться. На хабре даже была статься по этому поводу.
    В общем множество подобных ситуаций после которых так и хочется воскликнуть "какого черта?!". Со слоном я не помню ни одной такой ситуации.
    2) RETURN во вставках/обновлениях. Можно получить в ответе любое поле такого запроса. И ни каких тебе танцев с LastInsertId.
    3) В последних версиях есть UPSERT которого очень не хватало.
    4) В целом более строгий подход и нет ощущение бардака.
    5) После запуска Postgres Pro появилась полностью руссифицированная документация. Помогает вкатиться в тему новичкам.

    Из минусов некоторое время было отсутствие адекватного UI клиента. Но после того, как стал использовать PhpStorm эта проблема была закрыта.
    Ответ написан
    1 комментарий
  • Почему Postgres добавляет час к дате?

    alekciy
    @alekciy
    Вёбных дел мастер
    Сделайте чистый SQL запрос к базе (хоть банально из CLI) и посмотрите результат. Возможно у вас TZ соединения выставлена неправильно. В любом случае нужно начать с голого SQL запроса руками.
    Ответ написан
    Комментировать
  • Как перевести числовой массив в последовательность чисел для IN

    alekciy
    @alekciy
    Вёбных дел мастер
    Вообще-то функция array_to_string принимает вторым параметром разделитель. Пример прямо в документации: www.postgresql.org/docs/9.3/static/functions-array.html

    Но в целом у вас проблема с архитектурой и неправильным использованием реляционной базы. Потому что если там id записей другой таблицы, то в случае связи "многие-ко-многим" нужно просто "линковочная", промежуточная таблица.
    Ответ написан
  • PostgreSQL vs MysSQL на OpenVZ VPS?

    alekciy
    @alekciy
    Вёбных дел мастер
    не самое лучшее решение из-за особенностей работы openvz с shared memory.

    А какие там особенности то?

    А КПД будет выше того решения, которое оттюнено. Я думаю, что простая смена базы кардинально КПД не поднимет. Все же postgres больше удобнее на разработке и профиты от него сильнее чувствуются именно там.
    Ответ написан
    2 комментария
  • Как вы связываете Java + PHP?

    alekciy
    @alekciy
    Вёбных дел мастер
    >Сейчас там около 2 млн. записей с PK по text и обычно по нему идет поиск строки по полному совпадению.
    А каким образом добавление в систему нового компонента в виде Java решит проблему? На уровне СУБД точно нет проблем? EXPLAIN точно показал, что проблем нет?

    Описано довольно туманно, но чисто рефлектор на фразах «много тестовых данных» и «поиск» сразу возникает Sphinx.
    Ответ написан
    Комментировать
  • В чем принципиальное отличие unique (constraints) от unique index?

    alekciy
    @alekciy
    Вёбных дел мастер
    Разница в том, что ограничения (сonstraints) призваны обеспечивать целостность данных, а индексы (index) — скорость доступа к данным. Это две абсолютно не связанные сущности. Причем если первое — часть SQL стандарта, то второе нет (ибо ни как не связанно с функциональностью языка, введение индексов — вынужденная мера). Разработчик сам решает, в каких случая применить эти механизмы и использование одного вовсе не требует использование другого.

    Теперь касательно уникальности (unique). В данном случае при добавлении ограничения уникальности (unique constraint) Postgresql сам навешивает на указанное поле индекс. Это просто особенность реализации в данной СУБД. Разработчики решили, что вот так оно будет работать и все тут (причем небезосновательно). В другой же схожей ситуации они решили, что разработчик сам думает, нужно ли ему использовать этих два механизма вместе, или нет. Я говорю об ограничении целостности по внешнему ключу (foreign key). В Postgresql индексы по полям с данным видом ограничения не создаются (Индексы по внешним ключам в Postgresql). А, к примеру, в MySQL создаются. Это особенность реализации в MySQL.

    Поэтому важно просто понимать, что это не связанные вещи, просто в некоторых реализациях они «сцеплены» между собой и создание некоторых видов ограничений приводит к автоматическому созданию индекса.
    Ответ написан
    2 комментария
  • Как использовать схемы Postgresql в Doctrine 2?

    alekciy
    @alekciy
    Вёбных дел мастер
    Не скажу за doctrine, но запрос формата schema.table_name должен бы отрабатывать корректно. Как вариант можно перед запросом сменить текущую дефолтную схему через SET SCHEMA 'имя_схемы'
    Ответ написан
    Комментировать
  • Redis vs SQLite vs PostgreSQL

    alekciy
    @alekciy
    Вёбных дел мастер
    >В чём же тогда прелесть Redis-а?
    Данные всегда в ОЗУ, когда как в РСУБД индекс может быть вытесняться на диск, данные при этом на больших объемах почти всегда на диске. Поэтому и получаем просадку производительности из-за I/O на диске. В Redis это в принципе нет, они сейчас на сколько я помню от виртуальной памяти отказались. Про О(1) Ghostwriter уже сказал. ACID таки вносит свой оверхед.

    Ну и из подобной группы ПО его выделяет условная персистентность.
    Ответ написан