Ответы пользователя по тегу PostgreSQL
  • Почему могут не сохраняться новые данные в базу postgre?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Забыл сделать commit.
    Ответ написан
    Комментировать
  • Как через sequelize-typescript создать связь 1-к-1 с возможностью каскадного удаления?

    mayton2019
    @mayton2019
    Bigdata Engineer
    1:1 - это плохая идея с точки зрения БД. Создайте просто одну таблицу и разделите ее условно на 2 части.
    Это будет работать быстро и эффективно. И никаких JOINS. Несуществующие поля - заменяйте на nulls.

    C sequelize-typescript я не работал. Не знаю как оно там. Но лучше не создавать технических долгов еще на проектировании. Потом вам легче будет жить.
    Ответ написан
    1 комментарий
  • Как восстановить дб Postgres на компьютере из файла .gz?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ну если файл небольшой - то его можно раззиповать.
    $ gzip -d ....
    Ответ написан
    Комментировать
  • Как получить первые n записей для каждого значения одного поля?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Попробуй оконные функции https://www.postgresql.org/docs/current/tutorial-w...
    в частности row_number()
    Ответ написан
    Комментировать
  • Съезжает ли индексы после удаления записей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Индексы, будучи созданными один раз - остаются навечно.
    Если из таблицы удалены данные (50%) - то примерно
    столько - же данных будет удалено соотвественно и из индекса.

    Дисковое пространство которое занимает индекс - обычно не освобождается.
    Тут надо читать документацию по конкретной БД. Oracle может вести себя так,
    Postgres - как-то иначе.

    P.S. Интересная терминология. Съезжает...
    P.P.S Лётчик?
    Ответ написан
    Комментировать
  • Как сделать функцию полнотекстового поиска?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно попробовать начать с поиска по LIKE выражению. Обычно этого хватает для небольших таблиц.

    А сама постановка полно-текстового поиска - очень сложна в условиях. Например в том какие возможности поискового языка должны использоваться. Нужно ли учитывать национальные особенности языка. Стоп-слова. Стемминг. Лемматизацию. Как часто будут обновляться индексируемые данные. Это все - список экспертных вопросов которые надо проговорить. Если вы не знаете зачем вам это все - то наверное полнотекстовый поиск не нужен и like будет достаточно.
    Ответ написан
  • Можно ли ускорить запрос SELECT?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть простейший запрос SELECT * from Table.
    ...
    Реально ли как-то ускорить в этом случае?

    Есть много мест в application где может что-то замедлятся . И это не обязательно SQL. Это может
    быть веб-приложение, которое медленно отрисовывает таблицу. Или это может быть сетевой канал
    который медленно отдает данные. Чтоб заниматься оптимизацией - нужно точно-точно знать где
    оптимизировать. Или это будут зря потраченные усилия. Кроме того для UI например важно
    получение 1 page вместо того чтобы загружать миллиард строк. Поэтому нужно знать какой %
    результата выборки вы хотите использовать сразу (сию секунду) после получения и что
    можно отложить на потом. Мой опыт подсказывает что пользователь вообще не воспринимает
    информацию больше чем 1 абзац текста. Поэтому разгонять UI для отдачи миллиарда строк
    нет никакого смысла.
    Ответ написан
    Комментировать
  • Как сформировать деревья в json используя golang?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я-бы предложил для начала уйти от этого странного способа описанию деревьев к инверсному списку
    По сути - добавить еще одну колонку которая указывает на родителя.

    id name     path  parent
    -----------------------
    1  Беларусь 1     null
    2  Россия   2     null
    3  Минск    1.3   1
    4  Москва   2.4   2
    5  СПБ      2.5   2
    6  Невский  2.5.6 5


    Ну а дальше - select... connect prior и получим ранжированый курсор по дереву. Там-же будет
    доступно виртуальное поле level. И обходом этого курсора можно сделать JSON документ.
    Если level растет - то увеличиваем indentation и открываем вложенный элемент соотв.

    Если go-lang поддерживает stremable json writers то даже лучше.
    Ответ написан
    9 комментариев
  • Функция UPDATE в PostgreSQL не принимает вложенный запрос?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это скорее всего неправильно.
    SELECT  name, number_plate, violation
    FROM fine
    GROUP BY name, number_plate, violation
    HAVING count(*) > 1

    если используется GROUP BY то в выражении SELECT должна стоять функция агрегации (count в данном случае)
    Ответ написан
  • Как перенести EAV на jsonb в postgres?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если ты говоришь о нормализации - то никак. JSON не предполагает никаких ссылочных связей внутрь документа. Считай что JSON - это денормализованная копия БД. Как с этим жить - большой вопрос. И его надо обсуждать поняв что тебе на самом деле нужно. Потому что конвертация EAV в JSON это какая-то странная очень узкая задача. Может тебе на самом деле это и не надо.
    Ответ написан
  • Сколько запросов в секунду выдержить PostgreSQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сколько запросов в секунду - наперед никто не знает.

    Для оценки обычно берут аналогичную систему и пытаются как-то экстраполировать.

    В любом случае, если вы создаёте что-то новое - от вас требуется POC и бенчмарк. Без этого вы будете неубедительны.
    Ответ написан
    Комментировать
  • Проблема с liquibase,выдает ошибку, что делать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Предположительно он просто не находит liquibase-changelog.yml. Попробуй переложить его в другое место. Или изменить путь без classpath.
    Ответ написан
  • Как можно удалить запись в таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данные из таблиц как всегда удаляются через DELETE FROM table ... но если есть ограничения констрейнтов - то надо указать опцию CASCADE.

    Вообще в очень сложных и много-уровневых БД необычайно тяжело что-то удалять. Иногда удаление одной строки вызывает долгий процесс проверки зависимостей. Особенно на массовых удалениях.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот здесь что-то не то.

    ALTER TABLE country ADD CONSTRAINT country_fk0 FOREIGN KEY (IdCountry) REFERENCES city(IdCountry);


    Тут таблицей промахнулся. Или направление констрейнта должно быть наоборот. Города ссылаются на страны. Но не наоборот.
    Ответ написан
    2 комментария
  • Есть ли разница для скорости работы БД при установке типа text, а не varchar 128?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Лимиты на текстовые поля - это архаизм и пережитки старины далёкой. Они имели большой смысл для DBase, Clipper, FoxPro но для современных БД практически уже неактуальны. Можно брать text.
    Даже Oracle вобщем-то снял лимит 4000 байт на строку и настройками системных параметров можно его растянуть хотя-бы в 32 килобайта.

    Тем более что в поля все чаще кладут semi-structured информацию (JSON/XML e.t.c).

    Но вы можете их использовать просто как констрейнт чтобы акцентировать внимание что поле имеет особый вид строки. Например хеш SHA-256 или какой-то ключ или UUID.

    Поддерживаю Дмитрия в наблюдении за oversized attribute.
    Ответ написан
    Комментировать
  • Как правильно сделать проверку Email?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть хорошая статья на эту тему https://habr.com/ru/post/175375/
    Ответ написан
    Комментировать
  • Как лучше хранить и пересылать время: как полную дату или только время?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если backend это Java - то заявлен тип данных java.time.LocalDate. Он - сериализуемый следовательно будет однозначно писаться и считываться из памяти и из сети.

    Вообще у программистов backend не возникает вопросов как "лучше хранить" и передавать время. Если вы хотите сильно экономить то храните и передавайте количество секунд с начала суток. Это будет целое число от 0 до 86400. Достаточно экономно. Но будете иметь свои трения при согласовании форматов между отделами разработки фронта и бєка. Можете передавать строкой как есть "08:40:20" но договоритесь о запрещенных комбинациях и так далее.

    Короче этот вопрос не про Postgres а про технологии сериализации даты-времени, стандарты и протоколы.
    Ответ написан
    Комментировать
  • Какой тип данных использовать для хранения паролей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Пароль обычно обрабатывают. Добавляют некую символьную последовательность которая будет уникальна для данного приложения (salt) например abcxyz123. Это предотвращает подбор тривиальных хешей. После этого парольная фраза хешируется функцией (например) SHA-256. На выходе битовая последовательность - длиной 256 бит или в binhex кодировании (4 бита на символ) 64 символа. Вот эти символы можно вписать уже в текстовое поле типа text или varchar(64).
    Ответ написан
    Комментировать
  • Какой тип данных лучше использовать JSON или JSONB?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Какой формат данных (JSON или JSONB) лучше использовать в этой ситуации?

    Похоже автор занялся любимой задачей скучающих разработчиков. А именно - ПРЕЖДЕВРЕМЕННОЙ оптимизацией.

    JSON и JSONB возникли например из задачи хранения в БД ДОКУМЕНТОВ. Документ - предполагает специфический юзкейс. Например однократное создание и редкую модификацию. И частое чтение с поиском по текстовому индексу например.

    Является ли задача автора - подходящей под данный use-case? Чорт его знает. Я-бы сказал что пока нет. Все таки комментарии пользователя это такие себе... частые модификации документа которых хотелось-бы избежать.

    И вообще пока не будет создано 2 макета или 2 proof-of-concept с бенчмарками - мы не можем точно сказать что лучше.

    Сам-же Бартунов например в одном из своих докладов рассказывал что сама идея затащить в PG документы возникла из идеи работать с properties в одном поле. С такой себе неструктурированной информацией. А сама задача вознила из прикладной проблемы в дизайне базы для системы образования. Им нужно было хранить в строке неспецифицированный лист атрибутов. Это еще не JSON но уже дедушка его. Вот его так порешали. Это похоже на кейс автора? Я-бы сказал что далеко нет.

    Вообще чтоб доказать или опровергнуть огульный тезис о JSON-ификации я-бы довел постановку до абсурда. Зачем мы будем трекать комментарии в JSON. Давайте и посты туда-же. И странички. И вообще всю модель положим в 1 документ JSON. Каково а? У нас будет база с 1 единственной JSON строкой которая хранит в себе всё. Технологично? Да. И не запрещается.

    Вот как-то так.
    Ответ написан
    Комментировать
  • Можно ли мигрировать набор sql файлов в vcs based database management tool, для PostgreSQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да вы правы. Здесь liquibase вполне себе подходит. Можно брать более модный flyway. Но будьте внимательны. Оба этих продукта имеют бесплатную и платную функциональности. Очень часто начинающие прокалываются на чтении документации и думают что фича есть. А на самом деле она - платная.

    Но для простого юзкейса (без откатов) возможностей бесплатной части вполне хватит.
    Ответ написан
    3 комментария