文章目录
- Dynamically Generated Queries
- Aggregates
- constraints and assertions
- Triggers
Dynamically Generated Queries
也就是说可以用一个关键字
execute
可以把一个字符串里的内容当作指令执行!可以动态执行某个内容。
create or replace function
set(_table text, _attr text, _val text) returns void
as $$
declare
query text;
begin
query := 'update ' || quote_ident(_table);
query := query || ' SET ' || quote_ident(_attr);
query := query || ' = ' || quote_literal(_val);
execute query;
end; $$ language plpgsql;
Aggregates
类似case when then end这样对某行做筛选然后做聚合操作,其实有替代方法,那就是设计自己的聚合函数,根据某种条件再做聚合。
constraints and assertions
assertions 是schema-level级别的约束,主要描述多个表之间的约束关系。
CREATE ASSERTION name CHECK (condition)
每次相关表更新,都会去检查是否满足这个assertion。
create assertion ClassSizeConstraint check (
not exists (
select c.id
from Courses c
join Enrolments e on (c.id = e.course)
group by c.id
having count(e.student) > 9999
)
);
Triggers
触发器是为了加速对多个表之间关系的检查而取代assertion的。
Triggers provide event-condition-action (ECA) programming: