您好,登錄后才能下訂單哦!
在C++中,要使用PostgreSQL觸發器,你需要使用libpqxx庫,這是一個C++版本的PostgreSQL客戶端庫
sudo apt-get install libpqxx-dev
CREATE TABLE log_table (
id SERIAL PRIMARY KEY,
table_name TEXT NOT NULL,
action TEXT NOT NULL,
old_data TEXT,
new_data TEXT,
triggered_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
log_table
表上執行INSERT或UPDATE操作時,將日志信息插入到另一個表log_entries
中:CREATE OR REPLACE FUNCTION log_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO log_entries (table_name, action, old_data)
VALUES (TG_TABLE_NAME, TG_OP, OLD);
ELSIF TG_OP = 'UPDATE' THEN
INSERT INTO log_entries (table_name, action, old_data, new_data)
VALUES (TG_TABLE_NAME, TG_OP, OLD, NEW);
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
#include <iostream>
#include <pqxx/pqxx>
int main() {
try {
// 連接到PostgreSQL數據庫
pqxx::connection conn("dbname=your_database user=your_user password=your_password host=your_host port=your_port");
pqxx::work txn(conn);
// 創建觸發器
std::string create_trigger_sql = R"(
CREATE TRIGGER log_trigger
AFTER INSERT OR UPDATE ON log_table
FOR EACH ROW EXECUTE FUNCTION log_trigger();
)";
txn.exec(create_trigger_sql);
std::cout << "Trigger created successfully." << std::endl;
} catch (const pqxx::pqxx_exception &e) {
std::cerr << "Error: " << e.base().what() << std::endl;
return 1;
}
return 0;
}
g++ -o log_trigger log_trigger.cpp -lpqxx -lpq
./log_trigger
現在,當你在log_table
表上執行INSERT或UPDATE操作時,觸發器將自動將日志信息插入到log_entries
表中。你可以使用以下SQL查詢查看日志條目:
SELECT * FROM log_entries;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。