Python微信订餐小程序课程视频
https://edu.youkuaiyun.com/course/detail/36074
Python实战量化交易理财系统
https://edu.youkuaiyun.com/course/detail/35475
前言
本文是 sequence 系列继三大数据库 sequence 之华山论剑 (Oracle PostgreSQL MySQL sequence 十年经验总结) 之后的第二篇,主要分享一下 PostgreSQL 中关于 sequence 的一些经验。
测试环境准备
以下测试是在 PostgreSQL 11 中进行。
通过以下 SQL 创建:
测试用户: alvin,普通用户,非 superuser
测试数据库: alvindb,owner 是 alvin
测试 schema: alvin,owner 也是 alvin
这里采用的是 user 与 schema 同名,结合默认的 search_path
("$user", public),这样操作对象(table, sequence, etc.)时就不需要加 schema 前缀了。
| | postgres=# CREATE USER alvin WITH PASSWORD 'alvin'; |
| | CREATE ROLE |
| | postgres=# CREATE DATABASE alvindb OWNER alvin; |
| | CREATE DATABASE |
| | postgres=# \c alvindb |
| | You are now connected to database "alvindb" as user "postgres". |
| | alvindb=# CREATE SCHEMA alvin AUTHORIZATION alvin; |
| | CREATE SCHEMA |
| | alvindb=# \c alvindb alvin |
| | You are now connected to database "alvindb" as user "alvin". |
| | alvindb=> SHOW search\_path; |
| | search\_path |
| | ----------------- |
| | "$user", public |
| | (1 row) |
创建 sequence 的两种方式
sequence 常规用途是用作主键序列的生成。下面通过通过创建 sequence 及表来讨论 sequence 创建方式。
创建 sequence 方式一 直接创建
下面是一种简单方式直接创建 sequence 及表。
| | alvindb=> CREATE SEQUENCE tb\_test\_sequence\_test\_id\_seq; |
| | CREATE SEQUENCE |
| | alvindb=> |
| | CREATE TABLE tb\_test\_sequence ( |
| | test\_id INTEGER DEFAULT nextval('alvin.tb\_test\_sequence\_test\_id\_seq') PRIMARY KEY, |
| | create\_time TIMESTAMP DEFAULT clock\_timestamp() |
| | ); |
| | CREATE TABLE |
查看已创建的对象
| | alvindb=> \d |
| | List of relations |
| | Schema | Name | Type | Owner |
| | --------+------------------------------+----------+------- |
| | alvin | tb\_test\_sequence\_test\_id\_seq | sequence | alvin |
| | alvin | tb\_test\_sequence | table | alvin |
| | (2 rows) |
查看已创建对象的结构
| | alvindb=> \d tb\_test\_sequence |
| | Table "alvin.tb\_test\_sequence" |
| | Column | Type | Collation | Nullable | Default |
| |