前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL常用语句

PostgreSQL常用语句

作者头像
Java架构师必看
发布2021-06-10 15:58:57
8130
发布2021-06-10 15:58:57
举报
文章被收录于专栏:Java架构师必看

PostgreSQL常用语句

一、数据库 1.查询服务器版本

1.1查询详细信息

代码语言:javascript
复制
select version();

1.2查看版本信息

代码语言:javascript
复制
show server_version;

1.3查看数字版本信息包括小版本号

代码语言:javascript
复制
show server_version_num;

代码语言:javascript
复制
select current_setting('server_version_num');

注意:select current_setting(‘server_version_num’);返回类型为text,如果需要可以转换为interger

代码语言:javascript
复制
select current_setting('server_version_num')::integer;

2.创建数据库

代码语言:javascript
复制
create database testdb;

3.修改数据库

重命名数据库名称:

代码语言:javascript
复制
alter database testdb rename to new_name;

修改数据库并发连接数量:

代码语言:javascript
复制
alter database testdb connection limit 10;

修改数据库的表空间:

代码语言:javascript
复制
alter database testdb set tablespace new_tablespace;

4.删除数据库

代码语言:javascript
复制
drop database if exists testdb;

5.其他

查询用户

代码语言:javascript
复制
select usename from pg_user; 

二、表 1.新建表

代码语言:javascript
复制
create table student(
    id serial primary key,
    name varchar(64) not null,
    age integer not null,
    sex integer not null,
    createtime timestamp without time zone not null default now(),
    updatetime timestamp without time zone
);

id为主键,其中serial代表自增,默认从1开始增加,每次自增1。

复制表:

代码语言:javascript
复制
create table student_copy as select * from student;

2.删除表

代码语言:javascript
复制
delete table student;

3.查询表

查询student表是否存在:

代码语言:javascript
复制
select * from pg_class where relname = 'student' and relkind = 'r';
or
select * from pg_tables where tablename = 'student';

4.修改表

4.1对表本身操作

4.1.1重命名表名称

代码语言:javascript
复制
alter table student rename to new_student;

4.1.2添加表字段

代码语言:javascript
复制
alter table student add column height integer not null;

4.1.3删除表字段

代码语言:javascript
复制
alter table student drop column sex;

4.1.4重命名表字段

代码语言:javascript
复制
alter table student rename column name to new_name;

4.1.5更改字段属性

a)查询表所有字段属性

代码语言:javascript
复制
select c.relname, col_description(a.attrelid, a.attnum) as comment, format_type(a.atttypid, a.atttypmod) as type, a.attname as name, a.attnotnull as notnull from pg_class as c, pg_attribute as a where a.attrelid = c.oid and a.attnum > 0 and c.relname = 'student';

这里用到了pg_class和pg_attribute系统表,pg_class系统表记录了数据表、索引(仍然需要参阅pg_index)、序列、视图、复合类型和一些特殊关系类型的元数据;pg_attribute系统表存储所有表(包括系统表,如pg_class)的字段信息,数据库中的每个表的每个字段在pg_attribute表中都有一行记录。pg_class系统表中字段relname记录表名称,oid字段标识表的唯一id;pg_attribute系统表中attrelid也标识表的id。

b)查询表中指定字段的属性

代码语言:javascript
复制
select c.relname, col_description(a.attrelid, a.attnum) as comment, format_type(a.atttypid, a.atttypmod) as type, a.attname as name, a.attnotnull as notnull from pg_class as c, pg_attribute as a where a.attrelid = c.oid and a.attnum > 0 and c.relname = 'student' and a.attname = 'name';

pg_attribute系统表中atttypid与attname字段分别是表字段类型与名称。

c)更改字段由int4更改为int8:

代码语言:javascript
复制
alter table student alter column sex type bigint;

d)如果把字段name把属性Text转化为int,原来text里面存在空啥的,可以

代码语言:javascript
复制
alter table student alter column name type integer using (trim(name))::integer;

e)增加/删除字段约束

e1.增加/删除字段的非空约束

增加字段的非空约束:

代码语言:javascript
复制
alter table student alter column updatetime set not null;

这个约束会立即进行数据检查,所以表在加入约束之前必须确保已有数据符合约束条件,否则执行会报错;

这种情况下,可以先删除为null的数据行,再执行增加非空约束:

代码语言:javascript
复制
delete from student where updatetime  is null;
alter table student alter column updatetime set not null;

注意,只有增加非空约束才这样使用,而且非空约束没有名字。

删除非空约束:

代码语言:javascript
复制
alter table student alter column updatetime drop not null;

也只有非空约束才能这样删除。

e2.增加/删除 字段的检查约束:

在增加检查约束前,需要先删除已存在的不满足检查约束的数据:

代码语言:javascript
复制
delete from student where age <= 3;
--ck_student_cheack_age是检查约束名称
alter table student add constraint ck_student_check_age check(age > 3);

删除字段检查约束:

代码语言:javascript
复制
alter table student drop constraint ck_student_check_age ;

e3. 增加/删除 一个唯一约束:

在增加字段的唯一约束:

代码语言:javascript
复制
--唯一约束名称uk_student_nuique_name_age 为约名称,给name和age字段添加唯一约束
alter table student add constraint uk_student_unique_name_age unique(name,age);

删除字段的唯一约束:

代码语言:javascript
复制
alter table student drop constraint uk_student_unique_name_age;

4.2对表记录操作

4.2.1插入一条记录

代码语言:javascript
复制
insert into student (name, age, sex, createtime, updatetime) values('Tom', '18', 1, '2018-11-29 17:00:02', '2018-11-29 17:00:02') ;

可以把student1表符合条件的记录拷贝到表student2:

代码语言:javascript
复制
insert into student1 select * from student2 where age > 18;

4.2.2删除记录

删除符合条件的记录:

代码语言:javascript
复制
delete from student where id = 1;
 
delete from student where age > 18;
 
delete from student where createtime <= '2018-01-01 00:00:00';

清空表记录:

代码语言:javascript
复制
delete from student;
or
truncate table student;

区别:truncate table 表名 (注:不带where语句) 速度快,而且效率高。因为delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

4.2.3查询记录

代码语言:javascript
复制
--查询全部记录
select * from student;
 
--查询符合条件的记录
select * from student where age > 18;
 
--指定查询条件和要查询的字段
select name, age, sex from student where age > 18;

另外可以使用下面的sql查询数据库的连接信息:

代码语言:javascript
复制
select * from pg_stat_activity;

包含:客户端user、ip、执行语句,状态、时间 。

4.2.4修改记录

代码语言:javascript
复制
--更新符合条件记录的更新时间,保留到系统时间的秒位
update student set updatetime = date_trunc('second', now())  where age = 18;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PostgreSQL常用语句
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档