提交 9b81cac2 编写于 作者: M Mars Liu

fly on exercises

上级 79c2b029
{
"type": "code_options",
"author": "刘鑫",
"source": "customer_order.md",
"notebook_enable": false
}
\ No newline at end of file
# 客户和订单
我们现在看下面这个客户/订单系统
```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
{
"type": "code_options",
"author": "刘鑫",
"source": "paged.md",
"notebook_enable": false
}
\ No newline at end of file
# 分页
我们有如下表:
```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 ;
```
......@@ -2,5 +2,5 @@
"node_id": "pg-58e924e93b564a24abb1e6b9cdfbc094",
"keywords": [],
"children": [],
"export": []
"export": ["standby.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "刘鑫",
"source": "standby.md",
"notebook_enable": false
}
\ No newline at end of file
# standby
关于 PG Standby,错误的是:
## 答案
复制节点需要有主节点的超级用户权限。
## 选项
### A
Hot standby 是通过同步 WAL 实现的。
### B
从节点处于制度状态
### C
可以设置从节点切换为主节点的超时阈值
### D
从节点会保持与主节点的数据和结构一致
### E
从节点不需要和主节点保持长连接
### F
从节点不需要和主节点硬件环境一致
\ No newline at end of file
......@@ -2,5 +2,5 @@
"node_id": "pg-7eff3dcf68644c23bd89f2a2abe4fac6",
"keywords": [],
"children": [],
"export": []
"export": ["stream.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "刘鑫",
"source": "stream.md",
"notebook_enable": false
}
\ No newline at end of file
# 流式复制
关于流式复制,错误的是:
## 答案
流式复制的主节点损坏,会导致订阅节点也损坏。
## 选项
### A
订阅数据流的需要特定的复制角色
### B
订阅节点可以作为只读的从节点,提供读写分离
### C
主节点崩溃,子节点会将自己切换为独立工作状态
### D
节点间传输的是 wal 数据流
### E
主从节点的硬件配置可以不一致
### F
可以配置多级订阅
### G
可以多个从节点订阅一个主节点
\ No newline at end of file
{
"type": "code_options",
"author": "刘鑫",
"source": "fdw.md",
"notebook_enable": false
}
\ No newline at end of file
# 外部数据源
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
# 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 与其它类型一样,不能部分修改,只能作为整体插入或更新
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册