Postgresql中类似于SQL Server的user_id()函数的等效函数是什么?

3
我正在将数据库从SQL Server移植到Postgresql。我正在寻找SQL Server中user_id()函数的等价物,但是根据postgresql文档,似乎没有相应的函数。 current_user及其别名user对我没有用处,因为它们返回名称(文本),而我想要的是用户的ID(在SQL Server中返回)。
任何有关如何在PG中复制此重要功能的帮助都将不胜感激。

Postgres对"user_id"这个概念并不了解。为什么不能使用文本"username"呢?而且,看起来user_id()已经被弃用了。请参考http://technet.microsoft.com/en-us/library/ms181466.aspx。 - undefined
引用完整性并不要求某个东西是一个整数,只要它始终引用另一个唯一键即可。文本用户名和其数字ID一样有效地代表“同一用户”,在某些情况下可能是更好的选择,例如在将数据恢复到不同集群时,用户可能按不同顺序创建。(你的语气有点讽刺,不确定你是否有意这样,但如果是,请克制一下。) - undefined
2个回答

3

用户ID存储在pg_user表中。使用current_user,您可以选择用户ID。您可以编写一个过程来包装此操作,我想这就是user_id()函数在幕后执行的内容,但我不知道是否有现成的函数可以为您提供:

select usesysid from pg_user where usename = CURRENT_USER;

以下是关于pg_user表的文档:http://www.postgresql.org/docs/current/static/view-pg-user.html


我刚刚得出了相同的结论 - 我猜我会把它封装成一个函数。 - undefined

3

我认为没有内置的方法可以获取它,但是你可以编写一个函数:

CREATE OR REPLACE FUNCTION user_id() RETURNS INT AS $$
    SELECT usesysid::int 
    FROM pg_user
    WHERE usename = CURRENT_USER
$$
    LANGUAGE SQL
;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接