Ответы пользователя по тегу PostgreSQL
  • Как ускорить агрегацию данных в PostreSQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ммм... Можно данные разбить по периодам. Месяцы. Годы. Кварталы. И считать агрегации только по последнему
    закрытому периоду. А по старым - считать не надо. Потому что уже посчитаны. Главное сохранить куда-то.
    Типа analytic_table.
    Раньше эта техника называлась OLAP. А щас ее вроде бы уже не используют. Заменили на BigData.
    Ответ написан
  • Как наладить связи в бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    famsssss это ETL с нормализацией. Задача - типичная.
    У тебя должен быть примерно такой план действий.

    1) Таблицы vak, ring, mdb, cat, spec нужно загрузить в БД как есть. В денормализованном виде. Если они лежат в excel - то сохранить их как CSV формат. Далее дело техники. Можете задать другой вопрос в qna по поводу того как их грузить.

    2) Надо нарисовать реляционную модель. Это примерно то что ты рисуешь в картинке но нужно рисовать от сущности-связи а не от того какие файлы даны. Например есть сущность ISNN. У нее есть какие-то атрибуты. Они возможно опциональные. Но они должны быть перечислены. Далее - другие сущности. Потом определяем связи между ними. Например если многим spec соотвествует один ISNN - то тип связи будет многие к одному. Бывает такое что между двумя сущностями связи многие-ко-многим. Как прямоугольная матрица где по горизонтали одна сущность а по вертикали - другая и на пересечении стоит YES когда связь в наличии. Это тоже можно. Это делается через промежуточную таблицу. Связи бывают рекурсивные (таблица может указывать сама на себя). И в РМ могут быть циклы и петли. Это тоже допускается. Просто в этом случае между сущностями будут несколько вариантов как их джойнить и все варианты верны.

    3) После того как Реляционная Модель (РМ) определена - в нее можно загружать данные. Можно грузить через INSERT/UPDATE/MERGE. И если возможностей не хватит то можно брать хранимые процедуры на Postgres. Но обычно мне хватало и SQL. В крайнем случае можно брать языки типа Python, Ruby e.t.c. если например доменная модель ооооочень сложная и надо какие-то делать неочевидные поиски по коллекциям или работать с JSON/XML но у тебя вроде все атомарно и лежит просто в ячейках. Должно хватить SQL.

    4) Последняя таблица izdanya - по смыслу является отчетом из основной модели. Я настаиваю именно на таком подходе. Физически - это может быть view или таблица неважно. Главное что она - вторична по отношению к модели.
    Ответ написан
    Комментировать
  • Как с помощью TimescaleDB реализовать выгрузку последних данных с разбивкой по устройствам?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А попробуй убери из индекса дату.

    CREATE INDEX ix_imei_time ON locations (imei);

    Я не работал с TimescaleDB но вообще работать со вторичными индексами в time-series - это плохая тема.
    Лучше выбрать лидирующий партишен как дата. И вторичный партишен как хеш от какого-то интересующего
    атрибута или группы атрибутов. И тогда оптимизатор пойдет просто в тот фасет который соотвествует нужному
    пересечению партишенов.
    Ответ написан
  • Почему postgres не считает null уникальным значением?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если смотреть на проблему с точки зрения теории множеств - то использовать null - это так себе идея.
    Ведь в данном контексте пустое поле входит в состав ключевых. Атрибуты - да. Могут быть пустыми и не
    заполненными пользователем. Но ключи с пустотами вызывают еще больше вопросов если у вас
    будет задача ссылочной целосности например.
    Ответ написан
    2 комментария
  • Как правильно запускать хранимые процедуры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно в проекте заводят отдельный модуль. Версионный контроль для БД. Можно на базе
    liquibase или flyway. Можно на базе каких-то Go-технологий.

    Но суть такова. Хранимка устанавливается синхронно с обновлением версии комплекса. Как
    часть установочного pipeline. И далее из кода ты ее просто вызываешь по имени.
    Ответ написан
    Комментировать
  • Как в PostgreSQL вывести все названия таблиц и определенные столбцы из каждой?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сбор мета-данных по БД - это та часть SQL которая не урегулирована стандартом. И каждый вендор БД делают свои имена справочников таблиц. У Постгреса это будет information_schema.columns у Oracle - ALL_TAB_COLUMNS и т.д.

    Среди CLI инструментов тоже нет единого видения как собирать данные о схеме. Разные команды листинга.

    Единственную попытку стандартизировать я видел в семействе Java JDBC драйверов. Там с помощью интерфейсов DatabaseMetaData, ResultSet и Connection программист может собрать мету о таблицах.
    Ответ написан
    Комментировать
  • Как реализовать поиск в postgresql с Sequelize, в котором будет поиск в ячейке по словам в различном порядке?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно найти такие строки, в которых будет и 'one' и 'two', не зависимо от порядка

    Это задача на full text search. Начни читать отсюда

    https://www.postgresql.org/docs/current/textsearch...
    Ответ написан
    Комментировать
  • Как правильно организовать поиск по большому кол-во бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Как сделать поиск максимально производительным? Что использовать? Асинхронность? Многопоточность?

    Оптимизация запроса к БД начинается с того что вы выделяете сет активных запросов которые важны для вас.
    Для каждого из них строите план исполнения запросов
    EXPLAIN [ ANALYZE ] [ VERBOSE ] ......
    Потом с этим планом приходите к специалисту (или сюда) и спрашиваете что надо улучшить в
    тексте запроса или в таблице или в индексе чтоб было быстрее.

    Добавление большего числа исполнительных потоков (сессий БД) обычно не улучшает ситуацию
    а только ухудшает. Практика это показывает. Мы быстро выходим на пологую кривую пропускной
    способности диска - и дальше хоть добавляй потоки - все будет только хуже.

    Насчет асинхронных операций - не знаю. Если мы работаем через пул коннектов - то надо обсудить
    построение абстракции асинхронности над абстракцией пула. Это тема отдельного топика.
    Ответ написан
    Комментировать
  • Как произвести аналитику изменений и определить причину роста объёма базы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не знаю как щас. А лет 10 назад базы обслуживал DBA. Это был инженер и хозяйственник. Кроме того что он знал бизнес. Он также знал примерный объем таблиц в гигабайтах и в миллионах строк. Не обязательно все а хотя-бы топ 10. И даже если какая-то из них внезапно опухла - то это было-бы лакмусом того что в системе что-то пошло не так. (Я в бытность DBA-администраторства знал примерно сколько в день растут таблицы бизнес-фактов и сколько архивных логов накатывает Oracle). Обычно схема даже очень сложных систем состоит из справочников которые не растут. И из таблиц бизнес-операций которые и нужно держать под наблюдением. И их не очень много.

    Вот тут пишут как посмотреть размер таблиц https://stackoverflow.com/questions/21738408/postg...

    Количество строк - сами напишете. Ну и мониторинг и еще раз мониторинг. Возможно причины - банальны. Переход на новую версию комплекса в процессе которого были добавлены новые колонки например.

    И внезапный рост бизнес-данных - это не вопрос к qna. Это вопрос ко всем отвественным которые платят за железо и софт и сам программный продукт 1С.
    Ответ написан
    Комментировать
  • Какой должен быть синтаксис у SQL запроса при конфликте?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот тут примеры и синтаксис пишут

    https://wiki.postgresql.org/wiki/UPSERT
    Ответ написан
    Комментировать
  • Как в PostgreSQL хранить 16-ричные числа?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Автор пишет

    Строчкой затратно и тупо


    А кто знает расход памяти Postgresql на 1 datarow? Я не предлагаю в топике вывести формулу. Обычно ее нет
    либо она - приближенная. Но мы помним что postgresql хранит для каждой строки системные колонки.

    Документация упоминает их 6 штук https://www.postgresql.org/docs/current/ddl-system...
    Пишут что xmin и cmax - по 32 бита длиной.

    Вот. Значит торг автора между 16-ричным например и 10-ным вобщем не сильно оказывает влияние на размер строки. Я-бы предложил вообще не сильно его рассматривать. Но если кто-то нарисует нам все-таки формулу
    расчета физической длины строки - то будет неплохо.

    UPD: написал data-row. Это корректнее чем просто строка. А то непонятно.
    UPD: 16 ричное десятичное
    Ответ написан
  • Dbeaver не видит новые БД, что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Что там по сетевому доступу?

    Сделай в консоли

    $ nc -zv your-db-host 5432

    Александр Богдашкин, если нет - установи ее под Windows. Синоним - netcat. В данном случая я проверяю доступ к TCP-сокету.

    Если не найдешь - плохо. Но попробуй утилитой telnet подключиться также к хосту и порту.
    По тексту ответа можно определить открыт сокет для тебя или нет.

    Если сокет закрыт - то нет смысла делать эксперименты с Бивером. Тебя просто файрвол не пускает.

    UPD. Удалено лишнее.
    Ответ написан
  • Почему я получаю данную ошибку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется ты смешал в кучу две разные технилогии. Bind variables. Это вставка специальных переменных
    в тело DML/DQL запроса вместо значений. Это поддерживается на уровне БД. Это важно для БД потому что идет компилляция текста запроса для повторного его исполнения много раз.

    И интерполяция строк. Это просто тупо генерация новой строки. К базам не имеет отношения.
    Это поддерживается Python например. Строковой интепорляцией ты можешь сделать первую часть запроса.

    Сделать нечто вроде
    "UPDATE emp SET ename=? WHERE empid=?"
    (кстати в синтаксисе у тебя скорее всего была ошибка)

    И потом уже вместо вопросительных знаков добавить bind variables.
    Ответ написан
    Комментировать
  • Можно ли как-то отследить прогресс добавления колонки в БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно добавлять в часы когда пользователи не работают с БД. И добавлять в несколько этапов.
    Сначала просто добавить колонку. Потом ее дефолтное значение обновить. Это можно порциями делать.
    Потом констрейнты и триггеры добавить. И смотри чтоб ты не пересекался с джобом который делает
    вакуум.

    Сколько времени - ждать ХЗ. Наверное в PG есть monitoring views которые показывают текущие активности.
    Но это я не знаю. Пусть другие подскажут.
    Ответ написан
    Комментировать
  • Что значит "знать PostgreSQL"?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ух. Нет предела совершенству. Можно начать читать отсюда https://www.postgresql.org/docs/current/index.html

    Если спрашивают на собеседовании - то у них есть конкретная позиция или должность например DBA или разработчика. У них - очень разные задачи. Например DBA заниматеся бекапами, перформансом. Поднимает новые экземпляры БД для бизнеса. Лечит упавшие. Делает апгрейд версий софта. Вобщем поддерживает непрерывный цикл работы. Если спрашивают на разработчика (к примеру для банка) - то нужно знать режимы работы транзакций (их там 4 штуки кажется). Нужно знать и применять индексы. Оценивать когда они полезны и когда - бесполезны. Писать триггеры и хранимые процедуры. Если ты идешь разработчиком в какой-нибудь 2ГИС то будут спрашивать гео-поисковые возможности PG. Кроме того в наше время разработчик с БД работает малую часть времени. Все таки его основными языками будут Java/C# e.t.c. и фреймворки типа Hibernate. И нужно распределять усилия. Чистых БД разработчиков я уже лет 10 не видел. Поэтому стоит ли "упарываться" прямо в постгрес - ну я не знаю.

    Вобщем PG - это очень старый программный продукт с большой историей у которого есть много расширений и знать их все сразу невозможно.
    Ответ написан
    2 комментария
  • Что лучше при архитектуре базы данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть организации и есть два способа построить бд это для каждой организации создавать копии таблиц с префиксом

    Тебе повезло. У тебя - postgres. Создай для каждой организации отдельную базу.
    CREATE DATABASE org1 OWNER moshiva;
    CREATE DATABASE org2 OWNER moshiva;

    При необходимости создай еще одного пользователя и раздай привилегии.
    Префиксы делать не надо.
    Ответ написан
    4 комментария
  • Влияет ли тип ключа на скорость поиска по таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да влияет потому что физический размер индекса будет больше и на 1 PAGE влезает меньше ключей такой длины. GUID индекс будет требовать больше IOPS на поиск ключа т.к. быстрее заполнится 1 и 2 уровни дерева. В то время как у 1-2-3 индекса будет еще запас по росту.
    Ответ написан
    Комментировать
  • Как дать пользователю права суперюзера без использования стандартного пользователя postgres?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Судя по всему ты следуешь какой-то инструкции. По обучению наверное. Смотри если смысл - создать бд и стать владельцем - то это все не нужно. Качай постгрес под Windows и ставь его каким угодно способом. Базу табличное пространство и пользователя можешь создать скриптами. Если твой пользователь - владелец базы - то этого достаточно чтоб делать почти все что нужно.
    CREATE TABLESPACE tbs1 OWNER joker LOCATION '.....';
    CREATE USER joker WITH PASSWORD '123';
    CREATE DATABASE pingwin OWNER joker TABLESPACE tbs; 
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO joker;

    Менеджер пакетов чоко любят преподаватели курсов которым нужна шаблонная конфигурация для обучения на windows-десктопах. Другого смысла в чоко я не вижу.
    Ответ написан
  • Как себя ведет wordpress на PostgreSQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Хочу попробовать прикрутить wordpress на PostgreSQL в замену Mysql


    Как-то авантюрно звучит. Если сайтик маленький то все будет норм. Но я-бы предложил не класть
    все яйца в одну корзинку. И если у тебя например 4 сайта - то разложи их 2хPG + 2xMySQL
    чтобы была возможность что-то проверить.
    Ответ написан
    Комментировать
  • Используется ли пагинация в SQL запросах?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да какой пользователь 10000 тыщ записей способен прочитать??
    Сделай поисковые атрибуты по Name там... еще где то.
    И показывай первые 100 штук.
    Ответ написан
    1 комментарий