欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL中insert_username的擴展使用

 更新時間:2025年06月16日 08:28:37   作者:文牧之  
insert_username?是 PostgreSQL 的一個實用擴展,用于自動記錄數據行的創(chuàng)建者和最后修改者信息,本文就來詳細的介紹一下insert_username擴展,感興趣的可以了解一下

insert_username 是 PostgreSQL 的一個實用擴展,用于自動記錄數據行的創(chuàng)建者和最后修改者信息。這個擴展特別適合需要審計跟蹤的應用場景。

一 擴展安裝與啟用

1.1 安裝擴展

-- 使用超級用戶安裝
CREATE EXTENSION insert_username;

1.2 驗證安裝

-- 查看已安裝擴展
SELECT * FROM pg_available_extensions WHERE name = 'insert_username';

-- 查看擴展提供的函數
\df+ insert_username.*

輸出示例:

white=# CREATE EXTENSION insert_username;
CREATE EXTENSION
white=# SELECT * FROM pg_available_extensions WHERE name = 'insert_username';
      name       | default_version | installed_version |                  comment                   
-----------------+-----------------+-------------------+--------------------------------------------
 insert_username | 1.0             | 1.0               | functions for tracking who changed a table
(1 row)

white=# \df+ insert_username.*
                                                                           List of functions
 Schema | Name | Result data type | Argument data types | Type | Volatility | Parallel | Owner | Security | Access privileges | Language | Internal name | D
escription 
--------+------+------------------+---------------------+------+------------+----------+-------+----------+-------------------+----------+---------------+--
-----------
(0 rows)

white=# 

二 基本功能與使用

2.1 核心功能

該擴展提供兩個主要功能:

  • 自動插入當前用戶名到指定列(記錄創(chuàng)建者)
  • 自動更新當前用戶名到指定列(記錄最后修改者)

2.2 基本用法示例

-- 創(chuàng)建測試表
CREATE TABLE documents (
    id serial PRIMARY KEY,
    content text,
    created_by text,  -- 記錄創(chuàng)建者
    modified_by text  -- 記錄最后修改者
);

-- 為表添加觸發(fā)器
CREATE TRIGGER track_document_users
BEFORE INSERT OR UPDATE ON documents
FOR EACH ROW EXECUTE FUNCTION insert_username();

輸出示例:

white=# CREATE TABLE yewu1.documents (
white(#     id int,
white(#     name varchar(20),
white(#     created_by text,   
white(#     modified_by text   
white(# );
CREATE TABLE
white=# CREATE TRIGGER track_document_users
white-# BEFORE INSERT OR UPDATE ON yewu1.documents
white-# FOR EACH ROW EXECUTE FUNCTION insert_username();
CREATE TRIGGER
white=# 
white=# \d yewu1.documents
                       Table "yewu1.documents"
   Column    |         Type          | Collation | Nullable | Default 
-------------+-----------------------+-----------+----------+---------
 id          | integer               |           |          | 
 name        | character varying(20) |           |          | 
 created_by  | text                  |           |          | 
 modified_by | text                  |           |          | 
Triggers:
    track_document_users BEFORE INSERT OR UPDATE ON yewu1.documents FOR EACH ROW EXECUTE FUNCTION insert_username()

三 高級配置選項

3.1 自定義列名

-- 創(chuàng)建使用不同列名的表
CREATE TABLE projects (
    id serial PRIMARY KEY,
    name text,
    creator text,      -- 替代 created_by
    last_editor text   -- 替代 modified_by
);

-- 使用參數指定列名
CREATE TRIGGER track_project_users
BEFORE INSERT OR UPDATE ON projects
FOR EACH ROW EXECUTE FUNCTION insert_username('creator', 'last_editor');

3.2 選擇性應用

-- 只跟蹤創(chuàng)建者
CREATE TRIGGER track_creator_only
BEFORE INSERT ON projects
FOR EACH ROW EXECUTE FUNCTION insert_username('creator', NULL);

-- 只跟蹤修改者
CREATE TRIGGER track_editor_only
BEFORE UPDATE ON projects
FOR EACH ROW EXECUTE FUNCTION insert_username(NULL, 'last_editor');

四 擴展內部原理

4.1 實現機制

insert_username 擴展實際上創(chuàng)建了一個觸發(fā)器函數,該函數:

  • 在 INSERT 操作時設置 created_by 列為當前用戶名
  • 在 UPDATE 操作時設置 modified_by 列為當前用戶名

4.2 使用的PostgreSQL特性

  • 觸發(fā)器函數
  • current_user 系統(tǒng)函數
  • 可變參數處理

五 性能考慮

5.1 性能影響

  • 觸發(fā)器增加的開銷通常很小
  • 每行操作增加少量CPU時間
  • 不影響查詢性能,只影響DML操作

5.2 優(yōu)化建議

-- 對大表考慮禁用觸發(fā)器進行批量操作
ALTER TABLE large_table DISABLE TRIGGER track_large_table_users;

-- 批量更新操作
UPDATE large_table SET ...;

-- 重新啟用觸發(fā)器
ALTER TABLE large_table ENABLE TRIGGER track_large_table_users;

六 與其他擴展的對比

特性insert_usernametemporal_tablespg_audit
用戶跟蹤???
時間跟蹤???
完整審計???
使用復雜度簡單中等復雜
性能影響

七 最佳實踐

命名一致性:在所有表中使用相同的列名(如created_by/modified_by)

組合使用:與時間戳觸發(fā)器結合使用

權限控制

-- 防止手動修改跟蹤列
REVOKE UPDATE ON created_by FROM public;

文檔記錄:在數據庫文檔中記錄審計策略

異常處理:考慮添加錯誤處理邏輯

八 限制與注意事項

  • 不記錄超級用戶的更改(如postgres用戶)
  • 需要觸發(fā)器權限才能創(chuàng)建相關觸發(fā)器
  • 不會跟蹤DELETE操作
  • 在多語句事務中,用戶名是事務開始時的用戶

insert_username擴展提供了輕量級、簡單易用的用戶變更跟蹤功能,非常適合基本的審計需求,但對于復雜的審計場景可能需要更全面的解決方案。

到此這篇關于PostgreSQL中insert_username的擴展的文章就介紹到這了,更多相關PostgreSQL insert_username擴展內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PostgreSQL定時清理舊數據的實現方法

    PostgreSQL定時清理舊數據的實現方法

    最近覺得數據庫中每日數據不需要都保持,只需要保留30天的,所以這篇文章給大家介紹了PostgreSQL定時清理舊數據的實現方法,文中通過代碼示例和圖文給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-03-03
  • PostgreSQL配置遠程連接簡單圖文教程

    PostgreSQL配置遠程連接簡單圖文教程

    這篇文章主要給大家介紹了關于PostgreSQL配置遠程連接的相關資料,PostgreSQL是一個功能非常強大的關系型數據庫管理系統(tǒng)(RDBMS),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • PotgreSQL?基于時間點恢復過程

    PotgreSQL?基于時間點恢復過程

    本篇文章介紹?PostgreSQL?基于時間點恢復(point-in-time-recover)需要的條件及恢復過程,屬于操作說明,對PotgreSQL?時間點恢復相關知識感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • PostgreSQL中insert_username的擴展使用

    PostgreSQL中insert_username的擴展使用

    insert_username?是 PostgreSQL 的一個實用擴展,用于自動記錄數據行的創(chuàng)建者和最后修改者信息,本文就來詳細的介紹一下insert_username擴展,感興趣的可以了解一下
    2025-06-06
  • 玩轉PostgreSQL之30個實用SQL語句

    玩轉PostgreSQL之30個實用SQL語句

    本文主要整理總結了30個實用SQL,方便大家可以高效利用PostgreSQL,需要的朋友可以參考下
    2022-11-11
  • PostgreSQL中查看當前時間和日期的幾種常用方法

    PostgreSQL中查看當前時間和日期的幾種常用方法

    在 PostgreSQL 中,有多個函數可以用來查看當前時間和日期,這些函數在處理時間戳、日期和時間的計算時非常有用,以下是幾種常用的查看當前時間和日期的函數及示例,需要的朋友可以參考下
    2024-10-10
  • Postgresql根據響應數據反向實現建表語句與insert語句的過程

    Postgresql根據響應數據反向實現建表語句與insert語句的過程

    根據已有數據,可構建名為products的表,包含id(自增主鍵)、title(非空字符串)、progress(非空整數)三個字段,建表后,可通過insert語句插入數據,這種反向操作有助于從現有數據結構出發(fā),快速構建數據庫表,并進行數據填充,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • PostgreSQL連接數過多報錯:too many clients already的解決辦法

    PostgreSQL連接數過多報錯:too many clients already的解決

    在使用 Navicat 連接 PostgreSQL 數據庫時,突然遭遇到了一個報錯:“FATAL: sorry, too many clients already”,這一錯誤提示表明數據庫連接數已經達到上限,無法再創(chuàng)建新連接,所以本文給大家介紹了相關的解決辦法,需要的朋友可以參考下
    2024-03-03
  • PostgreSQL 實現登錄及修改密碼操作

    PostgreSQL 實現登錄及修改密碼操作

    這篇文章主要介紹了PostgreSQL 實現登錄及修改密碼操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL copy 命令教程詳解

    PostgreSQL copy 命令教程詳解

    這篇文章主要介紹了PostgreSQL copy 命令教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論