# 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之後, 在進行加總, 這要如何處理?