本章主要学习表的定义、模式等,包括:
1.创建表和约束
2.命令查看表的定义、模式和所有者
3.查看某个模式下有哪些表
4.查看一个表下有哪些约束
5.查看一个表属于数据库的哪个模式
创建表:基本语法:create table 表名(字段名 字段类型 字段约束,…)
//默认创建的是行存表,如果不指定模式,会在search_path中的第一个模式下创建
create table student(id int, name varchar(20));
//通过like子句快速创建表,并指定模式
create table test.student1 (like student);
//gsql客户端查看表结构
\d+ student
//查看表的定义
select pg_get_tabledef('student2');
//查看表信息
select * from pg_tables where tablename='student2';
实验操作:
--首先创建一张测试表。
drop table if exists table15;
create table table15(
id bigint,
name varchar(50) not null,
age int default 20,
primary key(id)
);
2.在gsql中查看表的定义、模式和所有者
--在gsql中,使用\d tableNmae命令查看表的定义。
\d+ table15;
--在gsql中,使用\d tableNmae命令查看表的模式和所有者。
\dt+ table15;
展示的信息更多:
Schema | Name | Type | Owner | Size | Storage | Description
3.查看某个模式下有哪些表
--查看public模式下的所有表名:
SELECT table_name FROM information_schema.tables WHERE table_schema='public';
4.查看一个表下有哪些约束
--查看约束名称、约束类型
select conname, connamespace, contype, conkey
from pg_constraint
where conrelid in ( select oid
from pg_class
where relname='table15');
--或者使用gsql的元命令\d tableName很方便地查看一个表上有哪些约束
\d table15
查看一个表属于数据库的哪个模式
\x
SELECT * FROM information_schema.tables WHERE table_name='table15';
附:通过无括号like创建表。
CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name LIKE source_table [ like_option [...] ]
like后不能添加普通建表的额外可选语句。
table前不能添加foreign选项,包括外表、mot表的创建。
默认复制源表的索引,若不希望复制索引,需要手动指定EXCLUDING INDEXES。
默认复制源分区表的分区,若不希望复制分区,需要手动指定EXCLUDING PARTITION。
只支持复制range分区表的分区,对于hash、list分区表,由于默认复制分区,会直接报错,需要手动指定EXCLUING PARTITION。二级分区只支持复制range-range分区,处理方法同上。
创建表。
CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
({ column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint
| table_indexclause
| LIKE source_table [ like_option [...] ] }
[, ... ])
[ AUTO_INCREMENT [ = ] value ]
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ COMPRESS | NOCOMPRESS ]
[ TABLESPACE tablespace_name ]
[ COMMENT {=| } 'text' ];
[ create_option ]




