请执行以下查询:
CREATE TEMP TABLE users
(
user_id SERIAL,
name varchar(50)
);
CREATE TEMP TABLE admins
(
section integer
) INHERITS(users);
INSERT INTO users (name) VALUES ('Kevin');
INSERT INTO admins (name, section) VALUES ('John', 1);
CREATE FUNCTION pg_temp.is_admin(INTEGER) RETURNS BOOLEAN AS
$$
DECLARE
result boolean;
BEGIN
SELECT INTO result COUNT(*) > 0
FROM admins
WHERE user_id = $1;
RETURN result;
END;
$$
LANGUAGE PLPGSQL;
SELECT name, pg_temp.is_admin(user_id) FROM users;
Run Code Online (Sandbox Code Playgroud)
是否有任何postgres功能可以让我摆脱is_admin函数?基本上检查行类类型(在继承方面)?
我理解桌面设计不理想,这只是提供一个简单的例子,所以我可以找出我所追求的是否可能.
您可以使用该tableoid隐藏的列本.
SELECT tableoid, * FROM users;
Run Code Online (Sandbox Code Playgroud)
或者在这种情况下:
SELECT tableoid = 'admins'::regclass AS is_admin, * FROM users;
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您想要找到非叶子成员资格,即如果存在superusers继承的会员资格,则会出现可怕的情况admins,超级用户将在此处报告为is_adminfalse.
AFAIK没有测试"是关系或任何子关系的成员",但如果你真的有这个,你可以通过子查询获得所有子关系的oid,做一个tableoid IN (SELECT ...).
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |