# DBA面試題目
以下題目皆以 PostgreSQL 13 為測試環境, 請DBA來公司面試前先提供作答的結果, 做為是否邀請過來面試的參考
## 1.時間轉換
(1)年-月-日 時:分:秒.毫秒轉換為毫秒(ms)
(2)毫秒(ms)轉換為年-月-日 時:分:秒.毫秒(ms)
(3)GMT+0, 2022-10-31 13:09:40.991 轉換為 GMT+8 的時間
## 2.SQL排序
(1)NULL,空字串(""),字串
```
a.字串排序:小寫英文,大寫英文,數字,符號(順序:~!@#$%^&*())
b.字串排序:大寫英文,小寫英文,數字,符號(順序:$%^&*()~!@#)
c.字串排序:小寫英文,數字,空白,大寫英文,符號(順序:~!@#$%^&*())
d.字串排序:小寫英文,數字,符號(順序:~!@#$%^&*()),大寫英文,空白
```
(2)字串,NULL,空字串("")
字串本身不排序
(3)空字串(""),字串,NULL
字串本身不排序
## 3.group by
產生一測試用Table, 包含 amount(bigint), create_time(ms) 二個欄位共1萬筆資料, create_time範圍為2021-01-01 00:00:00.000~2021-12-31 59:59:59.999, 然後將create_time轉換為年-月-日 時:分:秒.毫秒(ms)的格式, group by 年/月/日/周/時/分, 並將amount進行加總(SUM)
## 4.column使用autoincrement的優缺點?
## 5.
確認二個Table資料有部分差異的前提下, 如何在100萬/1000萬/1億筆資料中, 取得其中約10%差異性資料列表?
## 6.
確認二個Table資料應該是相同的前提下, 如何快速確認二個Table是否相同?
## 7.
DB Server/指定Database/指定Table的備份和還原指令
## 8.postgres_fdw跨database transaction
使用postgres_fdw跨database, 遇到transaction失敗, 需要rollback時, 與單一database的原理有何不同, 在那些狀況下會rollback失敗, 請設計一rollback會失敗的情境
## 9.Table Partition
若一Table有包含時間單位create_time(ms)欄位, 若要針對此欄位進行 Table Partition處理, 且是按日為單位進行切割, 請問是否可行? 若可行, 請問如何實作?
## 10.
如何避免或發現被Cracker竄改現有的資料
## 11.
使用GCP, 每周有約3小時的維護時間, 會如何制訂備份或降載(備份舊有資料後刪除)的計畫
## 12.nested jsonb的所有 attributes 進行加總
以下超過 1 level 的 nested jsonb:
```
insert into tmp(data) values
('{
"a": {
"a1": 111,
"a2": 120,
"a3": 130,
"a4": {
"a41": 141,
"a42": 142,
"a43": 143,
"a44": 144,
"a45": 145
}
},
"b": 200,
"c": 300
}'),
('{
"a": {
"a1": 1110,
"a2": 1120,
"a3": 1130,
"a4": {
"a41": 1141,
"a42": 1142,
"a45": 1145
}
},
"b": 1200,
"c": 1300
}'),
('{
"a": {
"a1": 110,
"a2": 120,
"a3": 130,
"a4": {
"a42": 142,
"a43": 143,
"a44": 144
}
},
"b": 200,
"c": 300
}');
```
若使用 jsonb_deep_sum extension 可以很容易達成:
https://github.com/furstenheim/jsonb_deep_sum
```
SELECT jsonb_deep_sum(data) FROM tmp;
result:
{
"a": {
"a1": 1331,
"a2": 1360,
"a3": 1390,
"a4": {
"a41": 1282,
"a42": 1426,
"a43": 286,
"a44": 288,
"a45": 1290
}
},
"b": 1600,
"c": 1900
}
```
但假如不使用 jsonb_deep_sum extension, 要使用單純的 SQL, 且不知道有那些 key 的 value 要進行加總的前提下, 也就是要先解析JSON找出所有的key之後, 在進行加總, 這要如何處理?