我创建了一个自定义类型:
CREATE TYPE my_type as(name text, street text, location text);
Run Code Online (Sandbox Code Playgroud)
初始化这样的类型很容易:
SELECT ROW('a', 'b', 'c')::my_type;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法可以部分初始化类型,这意味着所有未提及的列都隐式设置为 null。在伪代码中,类似于:
SELECT ROW('a', 'c')::my_type(name, location);
Run Code Online (Sandbox Code Playgroud)
另外,当列未按正确顺序提及时,是否还有一种初始化类型的方法?在伪代码中,类似于:
SELECT ROW('c', 'a', 'b')::my_type(location, name, street);
Run Code Online (Sandbox Code Playgroud) 执行 SQL 查询的普通 SQL 函数之间是否有区别:
create function get_sports() returns setof sport as
$body$
select * from sport;
$body$
language sql stable;
Run Code Online (Sandbox Code Playgroud)
和 PLPGSQL 函数返回相同的 SQL 查询:
create function get_sports() returns setof sport as
$body$
begin
return query select * from sport;
end
$body$
language plpgsql stable;
Run Code Online (Sandbox Code Playgroud)
关于性能?在什么情况下应该使用哪个版本?
如果我们传递参数,那会改变什么吗?如:
create function get_sports(status int) returns setof sport as
$body$
select * from sport where status = $1;
$body$
language sql stable;
create function get_sports(status int) returns setof sport as
$body$
begin
return …
Run Code Online (Sandbox Code Playgroud) postgresql performance plpgsql functions postgresql-performance
我有一个表t
和一些可以访问的函数t
。例如:
create function list_t() returns setof t as $$
select * from t;
$$ language sql stable;
Run Code Online (Sandbox Code Playgroud)
是否可以将角色权限定义为仅允许执行list_t()
,而不允许普通SELECT
、UPDATE
和查询DELETE
?INSERT
t
我尝试了以下方法:
grant execute on all functions in schema public to my_user;
revoke all on t from my_user;
Run Code Online (Sandbox Code Playgroud)
虽然这确实不允许SELECT * FROM t
,但也不允许SELECT list_t()
。
postgresql ×3
acl ×1
cast ×1
datatypes ×1
functions ×1
performance ×1
permissions ×1
plpgsql ×1
role ×1
syntax ×1