Postgresql数据库基本操作入门

本文详细介绍了PostgreSQL数据库的基本操作,包括查看数据库、切换schema、创建与删除数据库和schema,以及表的创建、数据写入、查询与更新。此外,还深入讲解了表的默认值设定、字段和表级别的约束检查,如年龄范围检查和时间先后顺序约束,并给出了违反约束时的错误示例。最后,提到了临时表的使用和管理。
摘要由CSDN通过智能技术生成

基本查看命令

  • 查看数据库:\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).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值