我正在考虑将用户的 OID 存储在表的“所有者”列中,因此如果他们更改用户名,我无需执行任何操作。
我知道可以将 pg_has_role() 与 OID 一起使用,这很好。
是否有一种快速简便的方法来获取当前用户的 OID,而无需将其与其中一个系统表进行匹配?
我正在考虑将用户的 OID 存储在表的“所有者”列中,因此如果他们更改用户名,我无需执行任何操作。
我知道可以将 pg_has_role() 与 OID 一起使用,这很好。
是否有一种快速简便的方法来获取当前用户的 OID,而无需将其与其中一个系统表进行匹配?
我知道的最快方法是在系统目录视图中查找
pg_roles
:严格来说,使用底层表会稍微快一些
pg_authid
,但出于充分的理由,只能由超级用户访问它。没有像表或类型那样的 对象标识符类型,这将允许像
'mytable'::regclass
.但请注意,OID 在转储/恢复周期中不稳定。所以,这对用例
OID
没有好处!在某些数据库中,我有一个单独的
login
表,其中包含用于类似目的的串行主键。手动维护。并且使用它的函数准备偶尔在此表中找不到用户。一个非常基本和快速的表:创建新用户时,我使用 plpgsql 函数在系统中创建新用户并同时将其输入到我的表中。我
login_id
在很多地方都使用它。例如,我会跟踪谁对大多数表中的一行进行了最后一次更改。我使用这个简单的功能:没有外键约束,因此可以保持快速和简单。显然,我不需要严格的参照完整性......