ZhangZhihui's Blog  

CTEs (Common Table Expressions):

 

 

Not materialized, because it is used only once.

 

Explicitly creating the CTE as not materialized looks having better performance than let PostgreSQL decide to do that.

 

Creating the CTE as materialized got bad performance.

 

 

CTEs with window functions:

 

     lag(), lead()

......

......

 

......

 

 

 

 

Recursive CTEs:

 

     random()

 

 

Hierarchical recursive CTEs:

 

 

Handling nulls:

 

 

 

     nullif()

 

 

 

Row value syntax:

          

 

 

     extract()

......

 

 

Views:

show search_path;
-----------------
 "$user", public

 

 

 

Materialized views:

A materialized view is like a cache. It is used for expensive queries. Its data is saved on disk and can be out of date, so you need to refresh it periodically. 

 

 

 

 

Removing duplicate rows:

 

 

Upsert:

复制代码
create table kv (
    key   text primary key,
    value TEXT
);

insert into kv (key, value) values ('cache:foo', 123);
select * from kv;
-- cache:foo 123

insert into kv (key, value) values ('cache:foo', 456) on conflict (key) do nothing;
select * from kv;
-- cache:foo 123

insert into kv (key, value) values ('cache:foo', 456) on conflict (key) do update set value = excluded.value;
select * from kv;
-- cache:foo 456

insert into kv (key, value) values ('cache:foo', 789) on conflict (key) do update set value = kv.value;
select * from kv;
-- cache:foo 456

insert into kv (key, value) values ('cache:foo', 789) on conflict (key) do update set value = excluded.key;
select * from kv;
-- cache:foo cache:foo

insert into kv (key, value) values ('cache:foo', 789) on conflict (key) do update set value = kv.key;
select * from kv;
-- cache:foo cache:foo
复制代码

 

复制代码
drop table kv;

create table kv (
    key   text primary key,
    value int4
);

insert into kv (key, value) values ('hits:homepage', 1);
select * from kv;
-- hits:homepage 1

insert into kv (key, value) values ('hits:homepage', 10) on conflict (key) do update set value =  kv.value + excluded.value;
select * from kv;
-- hits:homepage 11
复制代码

 

Returning keyword:

复制代码
insert into kv (key, value) values ('hits:homepage', 10) on conflict (key) do update set value =  kv.value + excluded.value
returning *;
-- hits:homepage 21

delete from kv
returning *;
-- hits:homepage 21

insert into kv (key, value) values ('hits:homepage', 1)
returning *;
-- hits:homepage 1

update kv set value = 2
returning *;
-- hits:homepage 2
复制代码

 

Coalesce generated columns:

 

 

 

posted on   ZhangZhihuiAAA  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2023-12-09 Docker - Remove build cache
2023-12-09 Docker: docker compose build --no-cache
2021-12-09 Math - 2D Affine Transformation
 
点击右上角即可分享
微信分享提示