PostgreSQL常用语句

PostgreSQL常用语句

PostgreSQL常用语句

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

1.1查询详细信息

select version();

1.2查看版本信息

show server_version;

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

show server_version_num;

select current_setting('server_version_num');

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

select current_setting('server_version_num')::integer;

2.创建数据库

create database testdb;

3.修改数据库

重命名数据库名称:

alter database testdb rename to new_name;

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

alter database testdb connection limit 10;

修改数据库的表空间:

alter database testdb set tablespace new_tablespace;

4.删除数据库

drop database if exists testdb;

5.其他

查询用户

select usename from pg_user; 

二、表
1.新建表

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。

复制表:

create table student_copy as select * from student;

2.删除表

delete table student;

3.查询表

查询student表是否存在:

select * from pg_class where relname = 'student' and relkind = 'r';
or
select * from pg_tables where tablename = 'student';

4.修改表

4.1对表本身操作

4.1.1重命名表名称

alter table student rename to new_student;

4.1.2添加表字段

alter table student add column height integer not null;

4.1.3删除表字段

alter table student drop column sex;

4.1.4重命名表字段

alter table student rename column name to new_name;

4.1.5更改字段属性

a)查询表所有字段属性

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)查询表中指定字段的属性

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:

alter table student alter column sex type bigint;

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

alter table student alter column name type integer using (trim(name))::integer;

e)增加/删除字段约束

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

增加字段的非空约束:

alter table student alter column updatetime set not null;

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

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

delete from student where updatetime  is null;
alter table student alter column updatetime set not null;

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

删除非空约束:

alter table student alter column updatetime drop not null;

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

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

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

delete from student where age <= 3;
--ck_student_cheack_age是检查约束名称
alter table student add constraint ck_student_check_age check(age > 3);

删除字段检查约束:

alter table student drop constraint ck_student_check_age ;

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

在增加字段的唯一约束:

--唯一约束名称uk_student_nuique_name_age 为约名称,给name和age字段添加唯一约束
alter table student add constraint uk_student_unique_name_age unique(name,age);

删除字段的唯一约束:

alter table student drop constraint uk_student_unique_name_age;

4.2对表记录操作

4.2.1插入一条记录

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:

insert into student1 select * from student2 where age > 18;

4.2.2删除记录

删除符合条件的记录:

delete from student where id = 1;
 
delete from student where age > 18;
 
delete from student where createtime <= '2018-01-01 00:00:00';

清空表记录:

delete from student;
or
truncate table student;

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

4.2.3查询记录

--查询全部记录
select * from student;
 
--查询符合条件的记录
select * from student where age > 18;
 
--指定查询条件和要查询的字段
select name, age, sex from student where age > 18;

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

select * from pg_stat_activity;

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

4.2.4修改记录

--更新符合条件记录的更新时间,保留到系统时间的秒位
update student set updatetime = date_trunc('second', now())  where age = 18;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101782.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java volatile 关键字详解「建议收藏」

    java volatile 关键字详解「建议收藏」javavolatile关键字详解一,什么是volatile关键字,作用是什么​volatile是java虚拟机提供的轻量级同步机制​作用是:1.保证可见性2.禁止指令重排3.不保证原子性本篇具体就讲解什么叫保证了可见性,什么叫禁止指令重排,什么是原子性而在这之前需要对JMM有所了解二,什么是JMM​JMM(java内存模型JavaMemoryModel简称JMM)本身是一个抽象的概念,并不在内存中真实存在的,它描述的

  • pycharm安装三方库_pycharm无网络安装第三方库

    pycharm安装三方库_pycharm无网络安装第三方库系统:mac10.15.3软件:2019.3pycharm导入第三方库的方法是1先点击File>OtherSetting>PreferencesforNewProjects2点击红框中的小+3在红线位置搜索要加载的第三方库,然后点击箭头所指的installPackage安装模块,点击后按钮按钮为灰色,等恢复后NumPy模块就已经安装完成了,并且显示在列表中,…

  • 五大常用算法之分支定界法

    五大常用算法之分支定界法看了五大常用算法之一这篇博文,感觉理解了很多,可是纯粹都是理论,缺少一些示例,所以准备综合一篇博文,以帮助自己记忆,原文:一、基本描述   类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中

    2022年10月31日
  • VS配置PCL“无法解析外部符号”

    VS配置PCL“无法解析外部符号”一开始报错:一般原因是没有包括需要的.lib报错说明可能出现在vtk和pcl_visualization的lib上。在依赖库中添加pcl_visualization.lib或者在.cmake文件中添加visualization重新编译,如下:===========================================================之后,报错只有两条:可知,现在只缺少vtk相关的lib。本人没有找到vtkLODActor和vtkShpe…

  • FindWindowEX的实例

    FindWindowEX的实例 FindWindowEX的实例  [日期:2004-12-24]  [来自:本站原创]函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。   函数原型:HWNDFindWindowEx(HWNDhwndParent,HWNDhwndChildAfter,LPCT

  • linux下socket编程实例_C语言窗口编程

    linux下socket编程实例_C语言窗口编程1.什么是TCP/IP、UDP?TCP/IP(TransmissionControlProtocol/InternetProtocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。  UDP(UserDataProtocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。下面的图表明了这些协议的关系。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号