前言
postgresql是一个开源的、对象关系型管理(ordbms)。本文旨在介绍postgresql(下文简称pg)的一些基本操作,供初学者参考和查阅。需要注意的是,以下所有操作是在ubuntu 16.04中进行的,使用的pg版本是9.6。对于不同的操作系统和版本,操作流程可能有些许的差别,具体可以参看后面给出的参考文档中的内容。
安装
ubuntu默认集成了pg,可以通过命令行直接安装
以下命令分别安装pg的客户端和服务端
$ sudo apt-get install postgresql-client $ sudo apt-get install postgresql
安装完成后,通过以下命令即可启动pg
$ sudo service postgresql start
相应的,只要将这里的start改为stop和restart,就可以实现服务的停止和重启
创建一个数据库
在初次安装完成后,pg默认已经进行了如下的操作:创建了一个名为postgres的数据库用户和一个名为postgres的数据库,同时还创建了一个名为postgres的linux系统用户。实际上,这里创建的postgres数据库用户拥有超级管理员身份,可以访问我们后面所创建的所有数据库,同时可以进行创建新数据库用户和修改用户密码等操作。
为了操作数据库,我们通常需要先登录控制台
$ sudo -u postgres psql
这条命令表示linux用户postgres以超级用户postgres的身份登录了名为postgres的数据库,因为是ubuntu系统,所以默认这个时候是不需要输入密码的,直接进入了pg的控制台
postgres=#
通常我们会在登录后先给postgres用户设置一下密码
postgres=# \password postgres
两次输入相同的密码后即可修改成功
因为postgers用户具有很高的权限,通常我们不会直接以这个身份登录,而是会另外创建一个新用户,比如创建一个和当前系统用户同名的数据库用户
postgres=# create user dbuser with password 'password';
然后我们可以为这个新用户创建一个数据库
postgres=# create database exampledb owner dbuser;
接下来我们就可以使用刚才创建的用户登录控制台并连接到创建的数据库中来进行一系列的操作了
$ psql -u dbuser -d exampledb
常用的控制台命令
\password 设置密码 \q 退出 \h 查看sql命令的解释,比如\h select \? 查看psql命令列表 \l 列出所有数据库 \c [database_name] 连接其他数据库 \d 列出当前数据库的所有表格 \d [table_name] 列出某一张表格的结构 \du 列出所有用户
常用的sql语句
# 创建新表 create table table_name(name varchar(20), birth date); # 插入数据 insert into table_name(name, birth) values('欧文', '1994-08-23'); # 查询记录 select * from table_name; # 更新数据 update table_name set name = '勒夫' where name = '欧文'; # 删除记录 delete from table_name where name = '欧文' ; # 添加字段 alter table table_name add email varchar(40); # 更改字段类型 alter table table_name alter column birth set not null; # 设置字段默认值(注意字符串使用单引号) alter table table_name alter column email set default 'example@example.com'; # 去除字段默认值 alter table table_name alter email drop default; # 重命名字段 alter table table_name rename column birth to birthday; # 删除字段 alter table table_name drop column email; # 表重命名 alter table table_name rename to backup_table; # 删除表 drop table if exists backup_table; # 删除库 \c postgres; drop database if exists hello;
备份和恢复
$ pg_dump --format=t -d db_name -u user_name -w -h 127.0.0.1 > dump.sql $ pg_restore -d db_name -h 127.0.0.1 -u user_name < dump.sql