From 9b81cac27149bdd9fe9caebbe8326c7ee62ca1b8 Mon Sep 17 00:00:00 2001 From: Mars Liu Date: Wed, 17 Nov 2021 09:36:16 +0800 Subject: [PATCH] fly on exercises --- .../customer_order.json" | 6 +++ .../customer_order.md" | 52 +++++++++++++++++++ .../paged.json" | 6 +++ .../paged.md" | 43 +++++++++++++++ .../1.standby/config.json" | 2 +- .../1.standby/standby.json" | 6 +++ .../1.standby/standby.md" | 33 ++++++++++++ .../config.json" | 2 +- .../stream.json" | 6 +++ .../stream.md" | 38 ++++++++++++++ .../3.fdw/fdw.json" | 6 +++ .../3.fdw/fdw.md" | 28 ++++++++++ .../3.JSON\345\222\214JSONB/json.json" | 0 .../3.JSON\345\222\214JSONB/json.md" | 31 +++++++++++ 14 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 "data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.json" create mode 100644 "data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.md" create mode 100644 "data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.json" create mode 100644 "data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.md" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.json" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.md" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.json" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.md" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.json" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.md" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.json" create mode 100644 "data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.md" diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.json" new file mode 100644 index 0000000..61c465e --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "customer_order.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.md" new file mode 100644 index 0000000..3b1df39 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/2.\350\277\236\346\216\245\346\237\245\350\257\242/customer_order.md" @@ -0,0 +1,52 @@ +# 客户和订单 + +我们现在看下面这个客户/订单系统 + +```postgresql +create table customers +( + id serial primary key, + company_name text, + address text, + city text, + state text +); + +create table products +( + id serial primary key, + description text, + unit_price money +); + +create table orders +( + id serial primary key, + product_id integer references products (id), + order_date timestamp, + quantity integer, + customer_id integer references customers(id) +); + +``` + +我们希望这个数据库能够允许每个订单包含多种商品,那么应该如何改造? + +## 答案 + +* 添加一个 order_detail 表,引用 order id、product id,增加 quantity 列 +* order 表中删除 product id 和 quantity 列 + +## 选项 + +### A + +将 order 表的修改为以 product id 和 customer id 作为联合主键 + +### B + +删除 orders 表中的 product id 和 quantity 列 + +### C + +在 order 表的主键上加唯一约束 \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.json" new file mode 100644 index 0000000..164a4b7 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "paged.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.md" new file mode 100644 index 0000000..559ec87 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/4.\345\210\206\351\241\265\346\237\245\350\257\242/paged.md" @@ -0,0 +1,43 @@ +# 分页 + +我们有如下表: + +```postgresql +create table orders +( + id serial primary key, + product_id integer, + order_date date default now(), + quantity integer, + customer_id integer +); +``` + +现在希望查询指定的某一天内的数据,并按每一百条一页查询,那么正确的语句应该是: + +## 答案 + +```postgresql +select id, product_id, order_date, quantity, customer_id from orders where date = $1 offset $2 limit 100; +``` + +## 选项 + +### 缺少 limit + +```postgresql +select id, product_id, order_date, quantity, customer_id from orders where date = $1 offset $2; +``` + + +### 缺少 offset + +```postgresql +select id, product_id, order_date, quantity, customer_id from orders where date = $1; +``` + +### 结构不对 + +```postgresql +select id, product_id, order_date, quantity, customer_id from orders where date = $1 and offset $2 and limit 100 ; +``` diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/config.json" index 054c186..7e6d65f 100644 --- "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/config.json" +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-58e924e93b564a24abb1e6b9cdfbc094", "keywords": [], "children": [], - "export": [] + "export": ["standby.json"] } \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.json" new file mode 100644 index 0000000..ef45c01 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "standby.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.md" new file mode 100644 index 0000000..fe5f6c0 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/1.standby/standby.md" @@ -0,0 +1,33 @@ +# standby + +关于 PG Standby,错误的是: + +## 答案 + +复制节点需要有主节点的超级用户权限。 + +## 选项 + +### A + +Hot standby 是通过同步 WAL 实现的。 + +### B + +从节点处于制度状态 + +### C + +可以设置从节点切换为主节点的超时阈值 + +### D + +从节点会保持与主节点的数据和结构一致 + +### E + +从节点不需要和主节点保持长连接 + +### F + +从节点不需要和主节点硬件环境一致 \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/config.json" index b162c46..8409fd8 100644 --- "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/config.json" +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-7eff3dcf68644c23bd89f2a2abe4fac6", "keywords": [], "children": [], - "export": [] + "export": ["stream.json"] } \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.json" new file mode 100644 index 0000000..66a7642 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "stream.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.md" new file mode 100644 index 0000000..ce48126 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/2.\346\265\201\345\274\217\345\244\215\345\210\266\351\233\206\347\276\244/stream.md" @@ -0,0 +1,38 @@ +# 流式复制 + +关于流式复制,错误的是: + +## 答案 + +流式复制的主节点损坏,会导致订阅节点也损坏。 + +## 选项 + +### A + +订阅数据流的需要特定的复制角色 + +### B + + 订阅节点可以作为只读的从节点,提供读写分离 + + +### C + +主节点崩溃,子节点会将自己切换为独立工作状态 + +### D + +节点间传输的是 wal 数据流 + +### E + +主从节点的硬件配置可以不一致 + +### F + +可以配置多级订阅 + +### G + +可以多个从节点订阅一个主节点 \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.json" new file mode 100644 index 0000000..9117294 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "fdw.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.md" new file mode 100644 index 0000000..e9345c3 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/1.\351\233\206\347\276\244\345\222\214\345\244\215\345\210\266/3.fdw/fdw.md" @@ -0,0 +1,28 @@ +# 外部数据源 + +RDVD 公司有一个 Oracle 数据库和一个PG数据库,现在需要每天汇总一次 PG 中的订单表和 oracle 中的客户信息表,从中生成一份 +报表。现在你想在尽量不增加冗余数据的前提下,在PG服务上每天执行一次简单的查询任务来生成报表,那么应该: + +## 答案 + +* 在 PG 数据库建立一个 fdw 数据源,连接 Oracle 数据库 +* 在 PG 服务器中建立一个视图, 对客户信息表进行的查询变成一个 PG 查询 +* 基于客户信息视图和订单表生成每日报表 + +## 选项 + +### 异构平台无法直接复制,且复制节点会影响功能 + +* 设置 PG 为 Oracle 的复制节点 +* 订阅 Oracle 的变更流 + +### 不可靠的方法 + +* 用一个定时任务复制 Oracle 中的客户信息变更 +* 写入 PG 数据库 + +### 低效且占用空间 + +* 在 PG 服务器上建一个同构的客户表 +* 在 Oracle 服务器上写一个触发器 +* 将客户信息写入 PostgreSQL 数据库 \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.json" new file mode 100644 index 0000000..e69de29 diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.md" new file mode 100644 index 0000000..f6daaf1 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/2.\351\253\230\347\272\247\346\225\260\346\215\256\347\261\273\345\236\213/3.JSON\345\222\214JSONB/json.md" @@ -0,0 +1,31 @@ +# JSON 和 JSONB 类型 + +关于 JSON 和 JSONB 类型,哪句话是错的? + +## 答案 + +JSON 就是 文本类型的封装,JSONB 是 JSON 的二进制压缩格式,JSON 和 JSONB 的功能与 TEXT 类型一样。 + +## 选项 + +### A + +JSONB 是推荐的 JSON 字段类型,更为高效。 + +### B + +JSONB 可以通过 GIST 倒排索引优化对内部结构的查询。 + + +### C + +PostgreSQL JSON 和 JSONB 支持 JSON PATH表达式 + +### D + +JSONB 和 文本可以有效兼容 + +### E + +JSON 和 JSONB 与其它类型一样,不能部分修改,只能作为整体插入或更新 + -- GitLab