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数据库基本操作入门的主要内容,如果未能解决你的问题,请参考以下文章

postgreSql使用入门

PostgreSQL新手入门

PostgreSQL新手入门

PostgreSQL新手入门

Postgresql数据库基本操作入门

PG入门postgreSQL体系结构和基本操作