Skip to content

Commit ba8a9b4

Browse files
digoal zhoudigoal zhou
authored andcommitted
new doc
1 parent a64d649 commit ba8a9b4

File tree

11 files changed

+299
-7
lines changed

11 files changed

+299
-7
lines changed

202108/20210818_02.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ PostgreSQL , 德说
1414
## 背景
1515
以下留给这个现象界:
1616

17+
[《德说-第167期, 水中捞月》](../202210/20221027_01.md)
18+
1719
[《德说-第166期, 象(决定人生命运的机会)只出现一次, 就看你能不能发现 - PolarDB的象》](../202210/20221025_06.md)
1820

1921
[《德说-第165期, 开源 vs 闭源 vs 某些传统文化如中医、手艺、功法等断代失传的现象》](../202210/20221024_05.md)

202108/20210827_01.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ PostgreSQL , KPI , OKR
2222
所谓“指月”, 源于六祖慧能与无尽藏尼对话的一个典故:无尽藏尼对慧能说:”你连字都不识,怎谈得上解释经典呢?“
2323
慧能回答:”真理是与文字无关的,真理好像天上的明月,而文字只是指月的手指,手指可指出明月的所在,但手指并不是明月。“
2424

25+
圣经也说: 字句杀死人. 书不是真理, 书好比船, 是帮助渡人去到真理的彼岸的.
26+
2527
我们现在唯KPI论, 甚至转入OKR时也容易犯同样的错误.
2628

2729
应该关注O(通常是体现在价值层面)而不是执着于K(北极星指标).

202208/20220831_01.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## DuckDB的字符串 collate用法 - 大小写、口音(西方各国字符集)、地域属性 - (icu, noCASE, noACCENT, noNFC)
1+
## DuckDB的字符串 collate用法 - 大小写、口音(西方各国字符集)、地域属性、排序 - (icu, noCASE, noACCENT, noNFC)
22
33
### 作者
44
digoal

202208/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
### 文章列表
44
----
55
##### 20220831_02.md [《DuckDB 聚合函数用法举例》](20220831_02.md)
6-
##### 20220831_01.md [《DuckDB的字符串 collate用法 - 大小写、口音(西方各国字符集)、地域属性 - (icu, noCASE, noACCENT, noNFC)》](20220831_01.md)
6+
##### 20220831_01.md [《DuckDB的字符串 collate用法 - 大小写、口音(西方各国字符集)、地域属性、排序 - (icu, noCASE, noACCENT, noNFC)》](20220831_01.md)
77
##### 20220829_04.md [《DuckDB 快速生成海量数据的方法》](20220829_04.md)
88
##### 20220829_03.md [《DuckDB:list,struct,map 类型很强大(支持lambda计算) - PostgreSQL:数组、row|record、json字典》](20220829_03.md)
99
##### 20220829_02.md [《DuckDB 字符串相似性计算函数》](20220829_02.md)

202210/20221026_05.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## DuckDB 对比 PostgreSQL 50张表JOIN 的优化器
1+
## DuckDB 对比 PostgreSQL 48张表JOIN 的优化器
22
33
### 作者
44
digoal
@@ -12,7 +12,7 @@ PostgreSQL , join 顺序调整 , 穷举 , geqo_threshold , from_collapse_limit ,
1212
----
1313
1414
## 背景
15-
这个case涉及50张表的JOIN有outer join, 有inner join.
15+
这个case涉及48张表的JOIN有outer join, 有inner join.
1616

1717
DuckDB 执行计划没跑出来, 有兴趣的同学可以分析一下火山图.
1818

@@ -613,6 +613,8 @@ explain 没跑出来. 具体需要分析一下flamegraph.
613613
duckdb备份供有兴趣同学研究复现: [download db.duckdb.bak.tar.bz2](db.duckdb.bak.tar.bz2)
614614

615615
explain时生成的火焰图供有兴趣同学分析: [download perf.svg.tar.bz2](perf.svg.tar.bz2)
616+
617+
ISSUE: https://github.com/duckdb/duckdb/issues/5097
616618

617619
## 参考
618620
[[未完待续] PostgreSQL 超级多表JOIN优化 - 优化器优化》](../201811/20181124_01.md)

202210/20221027_01.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
## 德说-第167期, 水中捞月
2+
3+
### 作者
4+
digoal
5+
6+
### 日期
7+
2022-10-27
8+
9+
### 标签
10+
PostgreSQL , 目的 , 六祖
11+
12+
----
13+
14+
## 背景
15+
16+
1、水中捞月的故事大家都耳熟能详. 猴子的目的是要拿到月亮, 月亮看似在水中, 但是猴子如果去水中求, 永远都捞不到月亮.
17+
18+
2、东施效颦: 《庄子·天运》载:美女西施因为心口疼,便经常手捂胸口,皱着眉头。邻家丑女看见了,觉得姿态很美,也学她的样子,结果丑女更丑了。后人将这个丑女称作东施。“东施效颦”这个成语比喻模仿别人,不但模仿不好,反而出丑(东施:越国的丑女。效:模仿。颦:皱眉)。
19+
20+
3、六祖指月的故事. 所谓“指月”, 源于六祖慧能与无尽藏尼对话的一个典故:无尽藏尼对慧能说:”你连字都不识,怎谈得上解释经典呢?“ 慧能回答:”真理是与文字无关的,真理好像天上的明月,而文字只是指月的手指,手指可指出明月的所在,但手指并不是明月。“
21+
22+
4、例如KPI 和 OKR: 如果给警察定KPI, 是定抓多少犯人为目标, 还是提高人民和谐稳定为目标?
23+
24+
5、文字是语言的符号, 语言是思想的符号. (摘自 王东岳-中西哲学启蒙课)
25+
26+
6、圣经说: 那字句杀死人. (书不是真理, 书好比船, 帮助渡人去到真理的彼岸的. 如果只注重知识, 而不明其背后的原因, 不明其经纶, 不去经历, 不去见证, 则只停留在书本(船)上, 无法达到彼岸.)
27+
28+
辅助手段不是目的, 如果你注重辅助手段, 久而久之就可能偏离真正的目的.
29+
30+
31+
为什么经典的字很少? 例如 道德经、黄帝内经
32+
- 字多, 描写越详细, 就越框定边界, 越容易让读者画地为牢.
33+
- 字少, 想象空间大, 边界越不受限, 更能超脱时空限制的表达其真正思想. 实现渡人的目的.
34+
35+
36+
## 运用:
37+
38+
1、误区1, 开源是为商业服务的?
39+
40+
请追问: 商业的目的是什么?
41+
42+
按前面的逻辑, 商业只是水中月, 请继续追问真实的月亮在哪里. 开源才不会跑偏.
43+
44+
2、误区2, 有位朋友今天发来一个截图, 问为什么这个地方PG不走索引, Oracle是走索引的. 怎样才能让PG走索引?
45+
46+
![pic](20221027_01_pic_001.png)
47+
48+
这也是典型的追寻水中月的问题, 你的目的是要让请求变快, 而不是让数据库走索引. (可能你脑子里认为走索引就一定更快? 所以你的物理月亮就变成索引了, 变成框定你的牢笼.)
49+
50+
这个问题背后的原理大家可以思考一下优化器的原理, 优化算法, 代价因子. 存储结构, 索引结构, 数据扫描方法, 资源消耗的计算方法 等等.
51+
52+
[《优化器成本因子校对(disk,ssd,memory IO开销精算) - PostgreSQL real seq_page_cost & random_page_cost in disks,ssd,memory》](../201404/20140423_01.md)
53+
54+
[《优化器成本因子校对 - PostgreSQL explain cost constants alignment to timestamp》](../201311/20131126_03.md)
55+
56+
当然, 这个case的目的也许是快, 其他case可能又是快和稳定的平衡. 所以说字句杀死人, 原因就在这里(也许你曾经看到索引可以加速的文章, 并误以为目的是让执行计划走索引). 不要忘记真实目的, 迷信字句.
57+
58+
3、圣经说的 字句杀死人, 要表达什么?
59+
60+
圣经的目的是: 人与神的灵互相内住并调和成为一, 组成高维生命.
61+
62+
## 发散问题:
63+
活着是不是终极目的?
64+
65+
永恒是不是终极目的?
66+
67+
存在是不是终极目的?
68+
69+
企业创新是目的?
70+
71+
和客户交流时, 客户描述的需求就是终极目的?
72+
73+
只要还能继续追问, 就说明还没有到达真理.
74+
75+
## 参考
76+
[《DB吐槽大会,第12期 - 没有自动成本校准器》](../202108/20210830_03.md)
77+
78+
[《优化器成本因子校对(disk,ssd,memory IO开销精算) - PostgreSQL real seq_page_cost & random_page_cost in disks,ssd,memory》](../201404/20140423_01.md)
79+
80+
[《优化器成本因子校对 - PostgreSQL explain cost constants alignment to timestamp》](../201311/20131126_03.md)
81+
82+
[《德说-第23期, KPI & OKR 陷阱 与 六祖指月》](../202108/20210827_01.md)
83+
84+
急中生智, 定静生慧.
85+
86+
[《德说-第161期, 人生最重要的事7: 知行合一, 空谈误国》](../202210/20221021_01.md)
87+
88+
89+
90+
#### [期望 PostgreSQL 增加什么功能?](https://github.com/digoal/blog/issues/76 "269ac3d1c492e938c0191101c7238216")
91+
92+
93+
#### [PolarDB for PostgreSQL云原生分布式开源数据库](https://github.com/ApsaraDB/PolarDB-for-PostgreSQL "57258f76c37864c6e6d23383d05714ea")
94+
95+
96+
#### [PostgreSQL 解决方案集合](https://yq.aliyun.com/topic/118 "40cff096e9ed7122c512b35d8561d9c8")
97+
98+
99+
#### [德哥 / digoal's github - 公益是一辈子的事.](https://github.com/digoal/blog/blob/master/README.md "22709685feb7cab07d30f30387f0a9ae")
100+
101+
102+
![digoal's wechat](../pic/digoal_weixin.jpg "f7ad92eeba24523fd47a6e1a0e691b59")
103+

202210/20221027_01_pic_001.png

67.6 KB
Loading

202210/20221027_02.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
## DuckDB 备份与恢复数据库
2+
3+
### 作者
4+
digoal
5+
6+
### 日期
7+
2022-10-27
8+
9+
### 标签
10+
PostgreSQL , export , import , schema , load , copy
11+
12+
----
13+
14+
## 背景
15+
16+
## 备份数据库
17+
18+
```
19+
-- export the database to the target directory
20+
EXPORT DATABASE 'target_directory';
21+
-- export the table contents with the given options
22+
EXPORT DATABASE 'target_directory' (FORMAT CSV, DELIMITER '|');
23+
-- export the table contents as parquet
24+
EXPORT DATABASE 'target_directory' (FORMAT PARQUET);
25+
26+
EXPORT DATABASE '/Users/digoal/Downloads/db.tmp' (FORMAT PARQUET, CODEC 'ZSTD');
27+
```
28+
29+
export database将duckdb全库备份到某个目录, 包括三类文件:
30+
31+
- 1、schema.sql 定义 : (It contains any CREATE SCHEMA, CREATE TABLE, CREATE VIEW and CREATE SEQUENCE commands that are necessary to re-construct the database.)
32+
- 2、数据文件(每个表一个)
33+
- 3、load.sql 加载数据的脚本 (The file contains a single COPY statement for every table found in the schema.)
34+
35+
36+
37+
## 恢复数据库
38+
39+
40+
1、使用import 语法
41+
42+
```
43+
--reload the database again
44+
IMPORT DATABASE 'target_directory';
45+
```
46+
47+
2、或 手工执行 定义、加载数据
48+
49+
```
50+
CLI:
51+
52+
.read schema.sql
53+
.read load.sql
54+
```
55+
56+
57+
## 其他
58+
import和export语法支持的option与copy语法类似, 例如设置存储格式, 压缩, csv的分隔符等等.
59+
60+
备份指定的表或者QUERY结果数据, 使用: `COPY table|query`
61+
62+
## 参考
63+
https://duckdb.org/docs/data/parquet
64+
65+
https://duckdb.org/docs/sql/statements/copy
66+
67+
https://duckdb.org/docs/sql/statements/export
68+
69+
70+
#### [期望 PostgreSQL 增加什么功能?](https://github.com/digoal/blog/issues/76 "269ac3d1c492e938c0191101c7238216")
71+
72+
73+
#### [PolarDB for PostgreSQL云原生分布式开源数据库](https://github.com/ApsaraDB/PolarDB-for-PostgreSQL "57258f76c37864c6e6d23383d05714ea")
74+
75+
76+
#### [PostgreSQL 解决方案集合](https://yq.aliyun.com/topic/118 "40cff096e9ed7122c512b35d8561d9c8")
77+
78+
79+
#### [德哥 / digoal's github - 公益是一辈子的事.](https://github.com/digoal/blog/blob/master/README.md "22709685feb7cab07d30f30387f0a9ae")
80+
81+
82+
![digoal's wechat](../pic/digoal_weixin.jpg "f7ad92eeba24523fd47a6e1a0e691b59")
83+

202210/20221027_03.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
## DuckDB select 语法糖: exclude, replace columns
2+
3+
### 作者
4+
digoal
5+
6+
### 日期
7+
2022-10-27
8+
9+
### 标签
10+
PostgreSQL , select , 排除 , 替换
11+
12+
----
13+
14+
## 背景
15+
16+
```
17+
-- select all columns except the city column from the addresses table
18+
SELECT * EXCLUDE (city) FROM addresses;
19+
20+
-- select all columns from the addresses table, but replace city with LOWER(city)
21+
SELECT * REPLACE (LOWER(city) AS city) FROM addresses;
22+
```
23+
24+
有多个列需要处理时, 括号内逗号隔开.
25+
26+
```
27+
create table a (c1 int, c2 int, c3 int, c4 int, c5 int);
28+
insert into a select random()*1000, random()*1000, random()*1000, random()*1000, random()*1000 from range (1,10);
29+
30+
D select * from a;
31+
┌─────┬─────┬─────┬─────┬─────┐
32+
│ c1 │ c2 │ c3 │ c4 │ c5 │
33+
├─────┼─────┼─────┼─────┼─────┤
34+
│ 905 │ 760 │ 845 │ 856 │ 959 │
35+
│ 999 │ 270 │ 385 │ 171 │ 916 │
36+
│ 701 │ 645 │ 631 │ 354 │ 343 │
37+
│ 247 │ 19 │ 564 │ 551 │ 790 │
38+
│ 383 │ 393 │ 548 │ 830 │ 321 │
39+
│ 13 │ 67 │ 71 │ 670 │ 129 │
40+
│ 69 │ 369 │ 85 │ 964 │ 536 │
41+
│ 594 │ 847 │ 408 │ 100 │ 271 │
42+
│ 200 │ 988 │ 253 │ 705 │ 153 │
43+
└─────┴─────┴─────┴─────┴─────┘
44+
45+
D SELECT * EXCLUDE (c1) REPLACE (c1+c2 AS c2) FROM a;
46+
┌──────┬─────┬─────┬─────┐
47+
│ c2 │ c3 │ c4 │ c5 │
48+
├──────┼─────┼─────┼─────┤
49+
│ 1665 │ 845 │ 856 │ 959 │
50+
│ 1269 │ 385 │ 171 │ 916 │
51+
│ 1346 │ 631 │ 354 │ 343 │
52+
│ 266 │ 564 │ 551 │ 790 │
53+
│ 776 │ 548 │ 830 │ 321 │
54+
│ 80 │ 71 │ 670 │ 129 │
55+
│ 438 │ 85 │ 964 │ 536 │
56+
│ 1441 │ 408 │ 100 │ 271 │
57+
│ 1188 │ 253 │ 705 │ 153 │
58+
└──────┴─────┴─────┴─────┘
59+
60+
D SELECT * EXCLUDE (c1,c2) REPLACE (c4+c5 AS c3) FROM a;
61+
┌──────┬─────┬─────┐
62+
│ c3 │ c4 │ c5 │
63+
├──────┼─────┼─────┤
64+
│ 1815 │ 856 │ 959 │
65+
│ 1087 │ 171 │ 916 │
66+
│ 697 │ 354 │ 343 │
67+
│ 1341 │ 551 │ 790 │
68+
│ 1151 │ 830 │ 321 │
69+
│ 799 │ 670 │ 129 │
70+
│ 1500 │ 964 │ 536 │
71+
│ 371 │ 100 │ 271 │
72+
│ 858 │ 705 │ 153 │
73+
└──────┴─────┴─────┘
74+
```
75+
76+
77+
## 参考
78+
https://duckdb.org/docs/sql/query_syntax/select
79+
80+
81+
#### [期望 PostgreSQL 增加什么功能?](https://github.com/digoal/blog/issues/76 "269ac3d1c492e938c0191101c7238216")
82+
83+
84+
#### [PolarDB for PostgreSQL云原生分布式开源数据库](https://github.com/ApsaraDB/PolarDB-for-PostgreSQL "57258f76c37864c6e6d23383d05714ea")
85+
86+
87+
#### [PostgreSQL 解决方案集合](https://yq.aliyun.com/topic/118 "40cff096e9ed7122c512b35d8561d9c8")
88+
89+
90+
#### [德哥 / digoal's github - 公益是一辈子的事.](https://github.com/digoal/blog/blob/master/README.md "22709685feb7cab07d30f30387f0a9ae")
91+
92+
93+
![digoal's wechat](../pic/digoal_weixin.jpg "f7ad92eeba24523fd47a6e1a0e691b59")
94+

202210/readme.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
### 文章列表
44
----
5+
##### 20221027_03.md [《DuckDB select 语法糖: exclude, replace columns》](20221027_03.md)
6+
##### 20221027_02.md [《DuckDB 备份与恢复数据库》](20221027_02.md)
7+
##### 20221027_01.md [《德说-第167期, 水中捞月》](20221027_01.md)
58
##### 20221026_06.md [《MacOS下抓取火焰图和分析程序性能的方法(sample, FlameGraph) - Linux Perf》](20221026_06.md)
6-
##### 20221026_05.md [《DuckDB 对比 PostgreSQL 50张表JOIN 的优化器》](20221026_05.md)
9+
##### 20221026_05.md [《DuckDB 对比 PostgreSQL 48张表JOIN 的优化器》](20221026_05.md)
710
##### 20221026_04.md [《DuckDB 对比 PostgreSQL join 优化器推理优化又一例》](20221026_04.md)
811
##### 20221026_03.md [《DuckDB COPY 数据导入导出 - 支持csv, parquet格式, 支持CODEC设置压缩》](20221026_03.md)
912
##### 20221026_02.md [《DuckDB 虚拟列 - `GENERATED ALWAYS AS () VIRTUAL`](20221026_02.md)

0 commit comments

Comments
 (0)