Задать вопрос
  • Как исправить ошибку postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Прежде всего проверьте версию СУБД. json_array_elements_text была добавлена в релизе 9.4.
    Ответ написан
    8 комментариев
  • Раздельный дамп базы, как организовать?

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

    Ну а по логическому дампу - записать данные и построить индексы или добавить индексы, а потом писать данные - две очень большие разницы.
    Поскольку речь о статистике - нарежьте статистику на партиции, можно в отдельный schema их пихнуть для удобства. Основную базу соответственно дампите с исключением данных партиций, затем заполняете разделы данными и пристёгиваете их к основной табличке. Или, что лучше, дампите в более подходящие format custom или directory всю базу, затем восстанавливаете параллельно с --exclude-schema и отдельно разделы статистики.
    Ответ написан
    Комментировать
  • Как спрятать таблицы для пользователя?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Никак.
    Ответ написан
    Комментировать
  • Какой тип данных выбирать для ID в PostgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Как я понял для ID лучше выбирать int, а не smallint.

    Тип необходимо выбирать соответствующий данным.
    Например, для идентификатора страны int будет явно избыточен. А где-то и int мало и нужен bigint

    2. Для названия акции есть тип character varying(n), varchar(n) Нужно ли задавать его длину? Или можно оставить поле пустым?

    Это вопрос к вам как автору схемы базы.

    3. Как влияет задание длины поля на экономию места в базе?

    Никак. Это просто дополнительное ограничение данных.
    varchar и text - типы с переменным размером, занимают столько места, сколько данных записано.

    Например сейчас все названия акций не более 10 букв, а что будет, если в будущем появится название из 30 букв? Придется изменять длину строки? Можно ли так делать, когда база уже частично заполнена?

    Увеличивать размерность возможно и это быстрая операция.

    4. Для чего ставить поле -Not null?

    Дополнительное ограничение на данные, запрещающее ставить специальное значение NULL, то есть "нет значения". Использовать или не использовать NULL - решение автора схемы базы.
    Если вы попытаетесь записать NULL в поле отмеченное not null - будет ошибка и ничего записано не будет.
    Ответ написан
    1 комментарий
  • Есть ли какой-то способ проверить правильность SHA1?

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

    SHA1 даёт ровно 160 бит информации. Никакой формы идентификации, избыточности или crc стандартом не предусмотрено.
    Ответ написан
    Комментировать
  • Почему два одинаковых запроса PDO возвращают разные результаты (один запрос подготовленный, а другой - обычный)?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Потому что это разные запросы. Соответственно:
    WHERE id IN ('104,106')
    WHERE id IN (104,106)

    Первый из-за мягкой системы типов mysql тихо превращается во что-нибудь интересное вроде id = 104 с незаметным варнингом от парсера mysql
    Ответ написан
    2 комментария
  • Почему у меня возникает ошибка при доступе к определённой базе данных PostgreSQL 11 из IntelliJ IDEA 2018.1?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Ваше приложение ещё не поддерживает вышедший в четверг postgresql 11. Возможно обновление уже выпущено, я так догадываюсь версия 2018.1 была довольно давно.

    proisagg и proiswindow были удалены из системного каталога pg_proc ещё в марте до feature freeze и эти изменения вошли в postgresql 11.
    Ответ написан
    Комментировать
  • Какие типы данных выбирать для новой базы данных для экономии места?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вероятно вы путаете понятия база и таблица. Иначе непонятно, что вы имеете в виду говор о FK между базами.

    Если цель оптимизировать занимаемое место для явно timeseries данных - то и используйте timeseries базы.
    Полновесный версионник с 23 байтами оверхеда на один только заголовок каждой строки (ещё не начиная считать данные, плюс выравнивание структур) сильно сомнительно что окажется компактнее ориентированных на timeseries данные базы.
    Ответ написан
    1 комментарий
  • Как решить проблемы с RAID, Smart Event?

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

    5 Reallocated_Sector_Ct 0x0033 001 001 036 Pre-fail Always FAILING_NOW 2028

    Диск труп. Не самая частая ситуация, когда об этом предупреждает механизм теоретически и предназначенный сообщать о проблемах, но вам повезло - SMART опознал, что диск при смерти. Меняйте его.
    Ответ написан
  • Postgresql - как включить логирование запросов?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    rpm-based (redhat, centos) и deb-based (debian, ubuntu) ставят postgresql разным образом. Поэтому детали различаются.

    PGDATA вида /var/lib/pgsql/9.6/data/ характерен для centos. Конфиг базы при этом лежит здесь же.
    ubuntu кластер по умолчанию кладут в /var/lib/postgresql/9.6/main/
    Логи в ubuntu по умолчанию будут писаться в /var/log/postgresql/postgresql-9.6-main.log , а конфиг - в /etc/postgresql/9.6/main/postgresql.conf

    В общем-то, вопроса тут два:
    найти куда пишутся логи базы либо изменить настройки, чтобы логи писались туда куда вы хотите. Это никак не связано с включением логирования запросов, это где логи в целом. Если у вас причина менять настройки места логирования - то вы уже должны представлять зачем.
    включить логированиие запросов: настройка log_min_duration_statement позволяющий логировать запросы дольше указанного времени (0 - все запросы) или log_statement, логирующая всё указанного типа (например, все DDL)

    При том практика centos писать логи в каталог базы в некотором отношении порочна: эти логи будут попадать в pg_basebackup, где им делать в общем-то совершенно нечего и незачем.
    Ответ написан
    1 комментарий
  • Portage SQL: найти различия реально?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Зачем вам Portage SQL вообще в винде?
    Наверное, речь всё-таки о PostgreSQL.

    Сравнение двух таблиц - банальный стандартный FULL OUTER JOIN
    select * from t1 full outer join t2 using(id) where (t1.*) is distinct from (t2.*);

    Сравнение баз - вероятно удобнее будет чем-то внешним.
    Ответ написан
    Комментировать
  • Raid 5 или 6 на ssd для esxi?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    SSD берут ради скорости, тем более внятные на запись серверные SSD.
    RAID5 или 6 ставят ради стоимости хранения гигабайта ценой заметного ущерба производительности записи.
    То есть не очень понятно, с какой целью вы рассматриваете 5 или 6 рейд на хороших SSD. Если важен объём - то берите более дешёвые S45xx

    и вообще у кого есть опыт использования ssd в рейдах на длительный срок(3-5 лет) как себя ведут ssd

    Intel - отлично себя ведут. Даже при проблемах с питанием, у них штатный конденсатор, держащий достаточно энергии для корректной записи всего что диск пообещал системе. В спеках описано как Enhanced Power Loss Data Protection
    У нас в эксплуатации много intel'ов разных лет (давно за сотню штук) Меняли в основном потому что в объём упирались. С отказом диска встречались только один раз. И это всё в условиях под постоянной нагрузкой СУБД postgresql.
    В общем, мы безоговорочно рекомендуем брать в сервера интеловские SSD (если получается) за надёжность и предсказуемый latency под нагрузкой. Другие диски - очень сильно по разному себя ведут.

    2) исходя из вопроса, есть смысл делать рейды 5 или 6 если все равно на все ссд пишется сразу данные ? получается к концу обьема записи ssd придется менять все диски сразу если какой раньше не вышел из строя

    Я не вижу смысла в 5/6 рейдах на хороших SSD не касаясь Lifetime Writes

    1) в этом контроллере есть hp smartpath, при его включении линейные скорость значительно ниже, примерно в 2 раза нежели при включении встроенного кеша, имеет смысл его вкл(smartpath или выключать) ?

    Лучше softraid. Серьёзно. Без шуток. Глупый HBA и softraid.
    hardraid под хорошие SSD надо или очень пристально настраивать хорошо зная свой контроллер или вы будете упираться в производительность контроллера, а не в диски.
    PS: зачем вам линейные скорости под базы и виртуалки? Тестируйте random io.
    Ответ написан
    Комментировать
  • Добавление ОЗУ с другими характеристиками?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Память формата DDR2 SDRAM должна уметь работать на напряжении 1.8V +/- 0.1V. Иначе она не может называться DDR2 SDRAM - это стандарт JEDEC.
    Ответ написан
    Комментировать
  • Возможно ли вывести количество уникальных слов в таблице?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    select lexeme, count(*) from tabledata cross join unnest(to_tsvector(data)) as lexemes group by 1;

    ?

    gin_trgm_ops - НЕ полнотекстовый индекс и не производит деление по словам. Это pg_trgm extension с реализацией триграмного поиска. Имеет отношение к тексту, но совсем не fulltext search.
    Ответ написан
    Комментировать
  • Умеет ли postgres в асинхронные запросы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    libpq умеет асинхронное выполнение запросов в том смысле, что запрос отправляется на выполнение и возвращает управление приложению не дожидаясь окончания выполнения запроса.
    Один коннект к базе в один момент времени может выполнять только один запрос. Вы не можете запустить один запрос и не дождавшись окончания его выполнения запустить другой через это же самое соединение. Через другое соединение - можете.

    Будут ли запросы в самой базе сериализоваться в очередь либо выполняться параллельно - вопрос к этим самым запросам. Читающие довольно сложно чем-то заблокировать, пишущие чаще могут конфликтовать за блокировки.
    Ответ написан
    Комментировать
  • Как получить правильный ассоциативный массив?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    $pdostmt->fetchAll(PDO::FETCH_KEY_PAIR);
    Первое поле результата будет ключом массива, второе - значением.
    Ответ написан
    Комментировать
  • Ошибка PHP(7.2): Warning: date_format() expects parameter 1 to be DateTimeInterface, boolean given?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Warning: date_format() expects parameter 1 to be DateTimeInterface, boolean given

    Что именно неясно в ошибке сказано? Параметр должен быть чем-то похожим на DateTimeInterface, а вы bool пихаете.
    Откуда bool - потому что date_create_from_format его имеет право вернуть. В частности, если формат строки не соответствует требуемому.

    Ну и не имеет смысла дёргать форматирование в строку и повторно strtotime, когда уже есть родной метод getTimestamp.
    Ответ написан
  • Какое количество оперативной памяти у меня свободно?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    linux ate my ram!/

    1686мб доступно. См. available в выводе free.

    И память kvm виртуалки с хоста мониторить невозможно. Хост ожидаемо видит, что гость использует всю память.
    Ответ написан
    Комментировать
  • PostgresQl почему второй запрос быстрее первого?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Смотрите explain (analyze, buffers), сильно желательно с включенным track_io_timing. Почти наверняка первый запрос вы читаете с диска, второй - уже из shared_buffers. Либо с page cache операционной системы.
    Ответ написан
  • Какую базу данных посоветуете для высокой согласованности между узлами CP в рамках CAP теоремы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    чтобы они были согласованные

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

    У пользователя 100 рублей на счету. У вас упала сеть между серверами баз.
    Пользователь хочет потратить 100 рублей.
    Что дальше?
    - запрещаем тратить пока не починим - вот это CP система. Мы в readonly, но все данные корректны, к какой базе бы не обратились. Синхронная репликация в основном
    - разрешаем потратить только на одной базе, вторая - readonly и соответственно может показывать отстающие данные. Но работает. Это любая СУБД умеющая master-slave репликацию. Реплика догонит состояние мастера непротиворечиво и самостоятельно когда почините сеть
    - разрешаем запись на обоих серверах. Пользователь нажал "купить" дважды, запросы случайно попали на разные сервера. Сеть починили - как соединять данные? Две покупки и -100 на счету? Какая-то одна покупка? Как это решать автоматически, да ещё на уровне СУБД, а не бизнес-логики?
    Ответ написан
    1 комментарий