Похоже, что с postgres есть два способа подготовить и выполнить подготовленные операторы.Вы можете использовать функции PQprepare
и PQexecPrepared
непосредственно из libpq
;или вы можете выдавать операторы SQL: PREPARE
и EXECUTE
.Имена операторов одинаковы для любого метода, поэтому вы можете использовать PQPrepare
для подготовки оператора, а затем выполнить его, выполнив запрос EXECUTE
(или использовать запрос PREPARE
, а затем выполнить его с помощью PQexecPrepared
).
Таким образом, два подхода (библиотечные функции и SQL-запросы) эквивалентны.Однако, похоже, что при использовании PQexecPrepared
столбец query
в pg_stat_activity
является основным подготовленным оператором с заполнителями.Так что-то вроде:
SELECT * from users where name in ($1, $2, $3);
Но когда вы используете запрос EXECUTE
, pg_stat_activity
содержит SQL EXECUTE
, например:
EXECUTE user_query('joe', 'bob', 'sally');
Вопросы
- Есть ли способ получить одинаковые выходные данные для двух разных способов выполнения подготовленных операторов?
- Есть ли способ увидеть и запрос, и связанные параметры при выполнении подготовленных операторов?