Подготовленные операторы

Создание подготовленных операторов, выполнение подготовленных операторов в Postgresql

    PREPARE EXECUTE и DEALLOCATE

    PREPARE - подготавливает оператор к выполнению, что позволяет оптимизировать производительность приложения.
    EXECUTE выполняет подготовленный ранее оператор, который будет существовать в рамках текущего сеанса
    Если команда PREPARE, создающая оператор, определяет некоторый набор параметров, команде EXECUTE должны быть переданы подходящие значения этих параметров
    С помощью PREPARE оператор разбирается, анализируется и переписывается. При выполнении команды EXECUTE подготовленный оператор планируется и исполняется, что исключает повторный разбор запроса и позволяет выбрать наилучший план выполнения
    Подготовленные операторы могут принимать параметры, значения которых подставляются в оператор при его выполнении, к этим параметрам можно обращаться по порядковому номеру, используя запись $1, $2 и т. д.
    Освободить подготовленный оператор можно вручную, выполнив команду DEALLOCATE
    Отличие в производительности значительно, если операторы достаточно сложны для планирования или перезаписи, когда в запросе объединяется множество таблиц
    DEALLOCATE - с помощью данной команды можно освободить подготовленные операторы
    Если у запроса нет параметров, при подготовке запоминается и построенный план выполнения. Если же параметры есть, то их фактические значения принимаются во внимание при планировании. Планировщик может посчитать, что план, построенный без учета параметров, окажется не хуже, и тогда перестанет выполнять планирование повторно.


    Источник: https://postgrespro.ru/docs/postgresql/13/sql-prepare

    --Подготовленный оператор INSERT и его выполнение testdb=# PREPARE testplan(int, text) AS INSERT INTO test_table VALUES ($1, $2); PREPARE testdb=# EXECUTE testplan (4, 'Ivan'); INSERT 0 1 testdb=# testdb=# EXECUTE testplan (4, 'Ivan'); INSERT 0 1 testdb=# testdb=# EXECUTE testplan (4, 'Egor'); INSERT 0 1 testdb=# testdb=# SELECT * FROM test_table ; id | name ----+------- 1 | test 2 | test1 4 | test3 4 | Ivan 4 | Ivan 4 | Egor (6 rows) --Подготовленный оператор SELECT и его выполнение testdb=# testdb=# PREPARE testselect AS SELECT * FROM test_table ; PREPARE testdb=# EXECUTE testselect ; id | name ----+------- 1 | test 2 | test1 4 | test3 4 | Ivan 4 | Ivan 4 | Egor (6 rows) testdb=# --Все подготовленные операторы можно увидеть в представлении testdb=# SELECT * FROM pg_prepared_statements \gx -[ RECORD 1 ]---+----------------------------------------------------------------------- name | testplan statement | PREPARE testplan(int, text) AS INSERT INTO test_table VALUES ($1, $2); prepare_time | 2024-03-27 19:40:00.362857+03 parameter_types | {integer,text} from_sql | t generic_plans | 0 custom_plans | 3 -[ RECORD 2 ]---+----------------------------------------------------------------------- name | testselect statement | PREPARE testselect AS SELECT * FROM test_table ; prepare_time | 2024-03-27 19:46:43.799834+03 parameter_types | {} from_sql | t generic_plans | 1 custom_plans | 0 testdb=#
    Источники
    Последнее изменение: 19.10.2024 23:16


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ