Postgresql数据库基本操作入门
Posted javartisan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postgresql数据库基本操作入门相关的知识,希望对你有一定的参考价值。
基本查看命令
-
查看数据库:\\l
-
\\c database 切换到指定数据库
-
切换schema set search_path to your_schema;
-
\\dn 列出当前数据下所有的schema
-
\\db 列出所有的表空间 tablespace
-
查看当前schema下面的表: \\d
-
查看表定义:\\d tableName
-
\\du或\\dg列出所有的角色或者用户
-
\\dp 查看权限分配
-
当客户端与服务器端编码不一致时候会出现乱码,此时可以使用 \\encoding utf8设置客户端编码
-
\\pset设置查询显示结果格式,是否有边框
-
\\x 将查询的每一行的每列数据都按照行展示,类似于mysql \\G
-
\\i sql_script.sql 执行脚本文件
-
\\echo sth 打印sth,通常可以在脚本文件中使用数据一些必要信息
数据库管理
-
创建数据库: create database yourDbName;
-
删除数据库:drop database yourDbName;
-
修改数据库:alter database name with option,更多option参见文档。pg支持数据库rename等很多操作
Schema
-
schema是db与table之间的逻辑层,是一种逻辑管理方式。
-
创建schema: create schema yourSchema;
-
删除schema: drop schema yourSchema;
数组类型写入数据
基础表定义
create table user_info
(
id int primary key,
name varchar(32)
);
数组表
create table user_array
(
users user_info[]
);
写入数据:
insert into user_array
values (ARRAY[ROW (2, 'artisan', 'boy')]::user_info[]);
备注: ::typeName 是类型转换的含义。
数据库表
- 临时表会话级别的临时表,会话结束临时表结束
create temporary table tabName
(
name char,
id int
);
- 事务级别的临时表,事务提交之后删除临时表里面的记录。会话结束临时表结束
create temporary table tabName
(
name char,
id int
) on commit delete rows;
除此之外,on commit 还支持如下配置:
1: on
commit perserve rows;-- 事务提交保留数据
2: on
commit drop; -- 事务提交之后删除临时表
建表时指定表的默认值
- 表定义
create table default_value
(
id int primary key,
name varchar(32),
gender varchar(10) default 'male' -- 指定表默认值是male
);
- 使用default关键字写入数据
insert into default_value
values (1, 'artisan', default); -- 在pg里面default可以用来指定默认值,前提该表有设置默认值
insert into default_value
values (1, 'artisan', 'female');
- 查询结果:
artisan=# select * from default_value ;
id | name | gender
----+---------+--------
1 | artisan | male
2 | mary | female
- 使用default关键字更新数据:
update default_value
set gender =default
where id = 2; -- 在pg里面default可以用来指定默认值,前提该表有设置默认值
- 再次查询结果
artisan=# select * from default_value ;
id | name | gender
----+---------+--------
1 | artisan | male
2 | mary | male
数据库表指定约束
数据库中存在主键 外键 非空 以及唯一性y约束之外,pg还支持更灵活的约束,例如字段约束与表约束。主键外键是字段约束
- 字段级别约束 检查约束
create table user_basic_info
(
id int primary key,
name varchar(32),
age int check (age >= 0 and age <= 120)
);
写入数据
artisan=# insert into user_basic_info values(1,'artisan',18) ;
INSERT 0 1
# 年龄大于120违反约束,报错
artisan=# insert into user_basic_info values(2,'mali',180) ;
ERROR: new row for relation "user_basic_info" violates check constraint "user_basic_info_age_check"
DETAIL: Failing row contains (2, mali, 180).
其中user_basic_info_age_check是数据系统生成的默认约束名字
手动指定约束名字:
create table user_basic_info_with_constraint_name
(
id int primary key,
name varchar(32),
age int
constraint age_checker check (age >= 0 and age <= 120)
);
当我们指定约束名字时候,违反约束会将约束名字一起随报错信息展示出来:
artisan=# insert into user_basic_info_with_constraint_name values (2,'mali',180) ; ;
ERROR: new row for relation "user_basic_info_with_constraint_name" violates check constraint "age_checker"
DETAIL: Failing row contains (2, mali, 180).
-
表级别 约束
通常字段级别约束可以改写为表级约束
字段约束改写表级约束:
create table user_basic_info_tab_level_constraint
(
id int primary key,
name varchar(32),
age int,
constraint age_checker check (age >= 0 and age <= 120) -- 表级别约束,同时指定约束名字
);
表级别约束使用场景示例:
create table order_info
(
id int primary key,
name varchar(32),
cart_time timestamp, -- 加购时间
order_time timestamp,
constraint cart_time_le_order_time check (cart_time < order_info.order_time) -- 加购物车时间一定早于下单时间
);
-- pg不支持列后面comment添加注释,可以使用格外语句,格式如下:comment on column tablename.fieldname is 'your comment' ;
comment on column order_info.cart_time is '加入购物车时间';
comment on column order_info.order_time is '下单购物车时间';
插入违反约束日期的数据:
insert into order_info
VALUES (1, 'iPhone11', '2020-11-11 12:12:12', '2020-11-11 12:12:10');
-- ERROR: new row for relation "order_info" violates check constraint "cart_time_le_order_time"
-- DETAIL: Failing row contains (1, iPhone11, 2020-11-11 12:12:12, 2020-11-11 12:12:10).
以上是关于Postgresql数据库基本操作入门的主要内容,如果未能解决你的问题,请参考以下文章