簡體   English   中英

如何從 postgres 觸發器中的雙表中使用 userenv 傳遞新的舊標識符

[英]how to pass the new old identifier with userenv from dual table in postgres trigger

我將 oracle 腳本轉換為 PostgreSQL ,這需要用戶更新 Oracle 中的最后登錄信息觸發我使用的這個:

if inserting then 
:new.last_update := sysdate
select osuser into :new.updated_by from gv@session where audsid =
(select userenv('sessionid') from dual);
end if;

我怎樣才能轉換為 postgres? 我在 select... from dual 和 dual is not postgres 中的表之后卡住了。

if TG_OP = 'INSERT' then
new.last_update :=current_timestamp;
SELECT usename INTO :new.update_by
FROM pg_user
WHERE usesysid = (SELECT ..(I got stuck here)
RETURN NEW;
END IF;

如何獲得觸發器 function 將與雙表正常工作?

首先讓我們弄清楚dual問題。 Oracle 語法要求完成 FROM 子句。 當沒有實際表而不是子選擇時,使用對偶來完成所需的語法。 Postgres 不需要完成 FROM 子句。 以下是相同的查詢。

      Oracle:                          Postgres:      
      Select 'abc' from dual;          Select 'abc';  

你的另一個問題,看起來你運氣不好。 在 Oracle 中,變量OSUSER是客戶端上的用戶(通過 Oracle 客戶端 - OCI),即使該用戶 ID 與用於登錄數據庫的用戶 ID 不同。 然而,Postgres 不提供此功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM