![](/img/trans.png)
[英]CREATE TABLE AS with PRIMARY KEY in one statement (PostgreSQL)
[英]PostgreSQL: CREATE FUNCTION returns one row by primary key
我写了以下函数:
-- Authenticate: Get session_id with user_id
CREATE OR REPLACE FUNCTION sessions_get(bigint) RETURNS SETOF char(32) AS
$$
SELECT strip_hyphens(id) as id FROM sessions WHERE user_id = $1;
$$
LANGUAGE SQL;
我希望能够运行查询SELECT sessions_get(1)
以获取用户 ID 为 1 的会话 ID。而且,我希望返回的列名称为id
。
那可能吗? 或者,查询必须是SELECT * FROM sessions_get(1)
吗? 在这种情况下,将SELECT sessions_get(1) as id
写SELECT sessions_get(1) as id
会更短。 哪个更好?
我可以删除SETOF
因为我知道这个函数总是返回 0 或 1 行吗? 我知道这是因为user_id
是sessions
表的主键。
将函数更改为:
-- Authenticate: Get session_id with user_id CREATE FUNCTION sessions_get(bigint, OUT id char(32)) RETURNS SETOF char(32) AS $$ SELECT strip_hyphens(id) FROM sessions WHERE user_id = $1; $$ LANGUAGE SQL;
然后,使用查询: SELECT * FROM sessions_get(1)
。
使用SETOF
以便在不存在时返回 0 行。 否则,您将获得 1 个空行。
为避免返回 SETOF,您始终可以这样做:
CREATE OR REPLACE FUNCTION sessions_get(IN a bigint, OUT id char(32)) RETURNS char(32) AS
$$
SELECT strip_hyphens(id) INTO id FROM sessions WHERE user_id = $1;
RETURN;
$$
LANGUAGE SQL;
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.