Задать вопрос
  • Как гарантируется порядок данных в столбцах для индекса BRIN?

    @galaxy
    Пункт 7.5 говорит о порядке строк в результатах конкретного запроса, ни к физическому порядку, ни к BRIN индексам это отношения не имеет.

    BRIN индекс вы всегда сможете применить (в смысле создать). Будет ли он использоваться, определяет планировщик, исходя из статистики данных и структуры запроса. Будет ли такой индекс эффективен, зависит действительно от данных.

    Наверно, лучше описать простыми словами, как работает BRIN, а вы уж сами думайте дальше.

    BRIN хранит небольшую выжимку об нескольких последовательных (в смысле размещения на диске) блоках данных таблицы. Поэтому он, как правило, очень эффективен по объему: по сравнению с B-tree и другими индексами он очень невелик.
    При запросе такой индекс отвечает на вопрос: совместима ли выжимка с условиями запроса, т.е. могут ли в блоках данных на диске быть подходящие под запрос строки. Например, для сортируемых типов данных индекс может хранить MIN и MAX значения колонки в пределах блоков, которые описывает выжимка.
    Индекс может выдавать ложноположительный ответ, но не может ложноотрицательный. Допустим, его спрашивают: "найди строки с x = 5", он видит у себя группу блоков с MIN=3 и MAX=20 и отвечает: "тут может быть строка с x = 5". А для группы с MIN=13 и MAX=88, например, он ничего не ответит, т.к. 5 там содержаться не может. СУБД, получив данные по такому индексу, обязана перепроверить строки на предмет ложноположительных результатов.

    Такой индекс лучше всего работает на данных, которые физически определенным образом расположены на диске (например, отсортированы по нужной колонке). Данные на диске лежат обычно в том порядке, как их положили (если потом их активно не стирали и перезаписывали).
    Допустим, если у вас есть архивная таблица с колонкой, содержащей дату создания, или с автоинкрементым полем, BRIN по этим полям будет эффективен.

    Если данные не отсортированы, BRIN будет выдавать слишком много блоков-кандидатов, в которых будет, скорее всего, сравнительно немного подходящих строк.
    Ответ написан
    Комментировать
  • Где почитать по планам, используемым планировщиком в PostgreSQL?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    На Хабре можно почитать. Есть хорошая серия статей по планам запросов:
    https://habr.com/ru/articles/275851/
    https://habr.com/ru/articles/276973/
    https://habr.com/ru/articles/279255/
    https://habr.com/ru/articles/281036/
    https://habr.com/ru/articles/282011/
    Если я правильно понял ваш вопрос.
    Ответ написан
    Комментировать
  • Как использовать оконные функции в Order By?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Потому что сортировка происходит по названиям столбцов.

    Что ты хочешь получить, указывая ORDER BY w, какая логическая операция должна быть произведена? w это не скаляр, который можно сравнить, а внутренняя машинерия.

    Если хочешь по сумме этой отсортировать, то лучше так (добавить alias):

    SELECT sum(num) AS num_sum OVER w FROM my_table WINDOW w AS (PARTITION BY name) ORDER BY num_sum;
    Ответ написан
    Комментировать
  • Как использовать оконные функции в Order By?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Наполовину правильно.

    С одной стороны, описание окна расположено в правильном месте - строго после HAVING clause (или того места, где бы оно находилось).

    С другой стороны, написан какой-то бред. Что должно означать ORDER BY w? Сортировка по определению окна? Вы же сами приводите правильную цитату:

    Оконные функции разрешается использовать в запросе только в списке SELECT и предложении ORDER BY.


    Где же у вас, собственно говоря, функция?

    Должно быть, ну, скажем, так:
    SELECT sum(num) OVER w 
    FROM my_table 
    WINDOW w AS (PARTITION BY name) 
    ORDER BY MAX(num) OVER w
    Ответ написан
    Комментировать
  • Почему рефлексия выводит для конструктора перечисления больше параметров, чем по факту?

    al_gon
    @al_gon
    Если у Enum нет конструктора(конструктор по умалчанию) то по факту там 2 параметра. String представелние и порядковый номер.

    protected Enum​(String name, int ordinal)

    https://docs.oracle.com/en/java/javase/11/docs/api...

    Если у Вас есть свой конструктор с одим аргументом, то после компиляции их будет 3.

    UPDATE:
    Здесь ещё пару слов о том, как именно всё происходит для Enum's

    https://www.benf.org/other/cfr/how-are-enums-imple...

    Я декомпилировал с CFR 0.151. (www.benf.org/other/cfr/index.html)

    И именно этот декомпилятор с флажком --sugarenums false даёт результат который подтверждает рефлекшен.

    /*                                                                                            
     * Decompiled with CFR 0.151.                                                                 
     */                                                                                           
    package com.learning.enums;                                                             
                                                                                                  
    public final class City                                                                       
    extends Enum<City> {                                                                          
        public static final /* enum */ City Moscow = new City("Moscow", 0, 45);                   
        public static final /* enum */ City Novosibirsk = new City("Novosibirsk", 1, 50);         
        private int regionCode;                                                                   
        private static final /* synthetic */ City[] $VALUES;                                      
                                                                                                  
        public static City[] values() {                                                           
            return (City[])$VALUES.clone();                                                       
        }                                                                                         
                                                                                                  
        public static City valueOf(String name) {                                                 
            return Enum.valueOf(City.class, name);                                                
        }                                                                                         
                                                                                                  
        private City(String string, int n, int regionCode) {                                      
            super(string, n);                                                                     
            this.regionCode = regionCode;                                                         
        }                                                                                         
                                                                                                  
        private static /* synthetic */ City[] $values() {                                         
            return new City[]{Moscow, Novosibirsk};                                               
        }                                                                                         
                                                                                                  
        static {                                                                                  
            $VALUES = City.$values();                                                             
        }                                                                                         
    }
    Ответ написан
    4 комментария
  • Как зарегистрировать свой Filter в Spring Framework (не Boot)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Ответ написан
    Комментировать
  • Как разрабатывать приложение Spring, чтобы каждый раз не деплоить его на сервер для отладки?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Идея умеет запускать одной кнопкой. И вроде даже обновлять код без остановки приложения.
    Ответ написан
    1 комментарий
  • Как разрабатывать приложение Spring, чтобы каждый раз не деплоить его на сервер для отладки?

    @Dementor
    программист, архитектор, аналитик
    Я так понимаю, что IntelliJ IDEA со встроенным Tomcat и отладкой по нажатию одной кнопки предлагать не нужно?

    Если не устраивает скорость работы Cargo, то напишите свой собственный плагин под Eclipse. Если ваш вариант окажется лучше, то сообщество спасибо скажет и на ваш гитхаб звездочек накидает - будет чем хвастаться на собеседованиях.
    Ответ написан
    1 комментарий
  • Разница между Callable и DeferredResult?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Зачем нужен чат-гпт, когда есть документация?

    DeferredResult provides an alternative to using a Callable for asynchronous request processing. While a Callable is executed concurrently on behalf of the application, with a DeferredResult the application can produce the result from a thread of its choice.
    Subclasses can extend this class to easily associate additional data or behavior with the DeferredResult. For example, one might want to associate the user used to create the DeferredResult by extending the class and adding an additional property for the user. In this way, the user could easily be accessed later without the need to use a data structure to do the mapping.
    An example of associating additional behavior to this class might be realized by extending the class to implement an additional interface. For example, one might want to implement Comparable so that when the DeferredResult is added to a PriorityQueue it is handled in the correct order.


    По факту заметил, что с DiferredRestult могу указывать сам пул потоков, а с Callable нет.

    Грубо говоря, да, разница в этом.
    Ответ написан
    Комментировать
  • Какой шаблонизатор Java сейчас востребован? Thymeleaf, Jsp, Freemarker?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    JSP полезно изучить как часть стандарта JEE, а Thymeleaf как наиболее современный и гибкий из java-шаблонизаторов.
    Ответ написан
    Комментировать
  • Как установить в ответ http-код 412 и одновременно отменить выполнение запросов типа POST, PUT, DELETE?

    @My1Name
    Как установить в ответ http-код 412 и одновременно отменить выполнение запросов типа POST, PUT, DELETE?

    Написать класс - контролер для соответствующей страницы с двумя методами: Один с аннотацией @GetMapping Второй с аннотацией @RequestMapping("/") или @PostMapping для выше упомянутых случаев, и добавить в его параметры HttpServletResponse resp В теле метода:
    resp.setStatus(412); return "redirect:error_page.html";
    Можно сделать метод void или делать переадресацию.

    REST - это GET и POST запросы (обычный HTTP), а необходимые данные передаются в качестве параметров запроса. Так что PUT, DELETE и всё остальное, можно отнести к @PostMapping
    Ответ написан
    Комментировать
  • Используются ли встроенные базы данных помимо этапа разработки?

    @Dementor
    программист, архитектор, аналитик
    Для мобильных приложений - это базовый сценарий.
    Ответ написан
    Комментировать
  • Используются ли встроенные базы данных помимо этапа разработки?

    Adamos
    @Adamos
    Популярная встраиваемая БД - SQLite, которую в продакшене используют почем зря.
    Например, браузеры и мессенджеры.
    Ответ написан
    Комментировать
  • Какой уровень блокировки строк по умолчанию в запросе SELECT?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Документация гласит

    https://www.postgresql.org/docs/current/transactio...

    Read Committed is the default isolation level in PostgreSQL.


    P.S. В Оракле - тоже самое.
    Ответ написан
    Комментировать
  • Какой уровень блокировки строк по умолчанию в запросе SELECT?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ни один из перечисленных.
    Для простого SELECT нужны AccessShareLock на таблицу/индексы/etc. row-level блокировки не применяются за ненадобностью.
    Ответ написан
    Комментировать
  • Почему тип столбца xml не проверяет входное значение?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    melkij=> select 'hello'::xml;
      xml  
    -------
     hello
    (1 строка)
    
    melkij=> select '<foo>hello'::xml;
    ERROR:  invalid XML content
    СТРОКА 1: select '<foo>hello'::xml;
                     ^
    ПОДРОБНОСТИ:  line 1: Premature end of data in tag foo line 1
    <foo>hello
              ^
    line 1: chunk is not well balanced
    <foo>hello

    есть проверка.

    Если вам нужно проверить, что это не просто валидный xml, но целый документ - добавьте check constraint с проверкой на columnname is document
    Ответ написан
    2 комментария
  • Почему тип столбца xml не проверяет входное значение?

    @Akina
    Сетевой и системный админ, SQL-программист.
    При этом по факту я спокойно вставляю в таблицу произвольную строку и никакой проверки не происходит, данные спокойно записываются в таблицу.

    Произвольный текст, не содержащий тегов, является валидным содержимым, но не XML документом. Не-XML фрагмент игнорируется при проверке.

    Попробуйте вставить нечто, являющееся документом/фрагментом XML, но с ошибкой в разметке - тут же схлопочете ошибку.
    DEMO
    Ответ написан
    Комментировать