Как получить значение параметра $ 1 из выполненного подготовленного оператора (внутри триггера с использованием current_query ())

В триггере я хочу видеть, какой sql-запрос вызвал этот триггер. Я использовал функцию current_query () в postgresql (8.4).

Все в порядке, но если триггер выполняется подготовленным оператором, я получаю заполнители ($ 1) вместо правильных значений. например (зарегистрированный запрос):

delete from some_table where id=$1

Есть ли способ получить / получить эти значения / параметры?

Отредактировано (пример добавлен):

--table for saving query
create table log_table (
query text
)

--table for trigger
create table some_table (
id text
)
--function itself
CREATE FUNCTION save_query() RETURNS trigger AS $$
    switch $TG_op {
    DELETE {
            spi_exec "INSERT INTO log_table (query) VALUES (current_query())"
        }
    default {
            return OK
        }
    }
    return OK
$$ LANGUAGE pltcl;

Создание триггера:

create trigger test_trigger before delete on some_table for each row execute procedure save_query();

Подготовленный оператор выполняется из спящего режима.

Снова отредактируйте (добавлена ​​часть java)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class DeleteUsingPreparedStmt {

    public static void main(String[] args) {
        try {
            String deleteString = "delete from floors where id = ? ";
            final int idToDelte = 1;

            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://127.0.0.1:5432/YOUR_DATABASE";
            Connection conn = DriverManager.getConnection(url, "user", "password");

            PreparedStatement deleteStmt = conn.prepareStatement(deleteString);
            deleteStmt.setInt(1, idToDelte);
            deleteStmt.executeUpdate();
        } catch (Exception e) {
            //hide me :)
        }
    }
}

Вам нужен драйвер jdbc - щелкните .

6
задан Michał Szkudlarek 19 August 2011 в 06:37
поделиться