PostgresQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
有人说:自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选。
但目前我感觉还是使用 MySQL 的多一些;
有公司是使用 PostgresQL 的小伙伴举个手!
最近有小伙伴在群里提到CentOS下安装PostgreSQL的问题,我也亲自尝试一下。本文仅仅介绍PostgreSQL的安装和基本用法,供初次使用者上手。这只是我做为一个 PostgreSQL 的初学者的学习记录,不是最佳实践。以下内容基于CentOS和Ubuntu 操作系统,其它操作系统实在没有精力兼顾,但是大部分内容应该普遍适用。
CentOS
yum install postgresql-server
或
dnf install postgresql-server
Ubuntu
apt-get install postgresql-9.3
后面需要跟版本号
注:Ubuntu 本身默认是包含 PostgreSQL 的;
CentOS 下安装完成后并不会自动启动,需要执行以下命令将其注册为系统服务,使其随系统启动:
service postgresql initdb
chkconfig postgresql on
Fedora 23 及其后续版本:
postgresql-setup initdb
systemctl enable postgresql.service systemctl start postgresql.service
CentOS 下使用yum 默认安装的是9.2版本。
PostgreSQL服务器默认使用本机的5432端口,可以通过以下命令查看:
ps aux | grep 5432
CentOS下需要先启动服务:
service postgresql start
初次安装后,默认生成一个名为postgres的数据库和一个名为postgres的数据库用户。这里需要注意的是,同时还生成了一个名为postgres的Linux系统用户。
PostgreSQL 的管理用户和系统的管理员不同。
createdb mydb
# createdb mydb
createdb: could not connect to database template1: FATAL: role "root" does not exist
root 角色不存在,数据库中并没有root 这个用户,你的可能提示的不是root,是你当前登录的用户名。
官方文档提示直接跳到 21章,创建用户;但要创建数据库用户必须登录才行;
Ubuntu 下可以使用以下命令切换用户:
sudo su - postgres
但CentOS下就这样了。
解决方法参考:centos 切换用户显示bash-4.2$,不显示用户名路径的问题
需要注意的是:切换用户后显示 -bash-4.2$ 其实用户切换已经成功了,只是显示的内容不符合预期;我开始以为是出错了,根本没办法操作。有点傻了。
已经切换到 postgres 用户下了,接下来再执行:
createdb mydb
此命令创建一个名称为”mydb“的数据库
在 postgres 用户下,使用以下命令登录 主数据库:
psql postgres
首先使用\password命令,为postgres用户设置一个密码
\password postgres
创建一个用户:
create user root superuser;
此命令创建一个名称为”root“的用户,权限为:superuser,超级管理员;
使用”\q“命令退出 psql,切换到 root 用户下,再执行创建数据库命令,一个比较有意思的事情发生了:
创建数据库成功了!
刚刚创建的 root 用户没有设置密码,我们再次登录,为用户设置密码:
并没有验证用户密码,数据库也可以创建成功了。
PostgreSQL 是使用的系统的用户验证方式吗?但是我的系统用户 root 和数据库中的用户 root 使用的不是相同的密码。
使用\q命令退出控制台
\q
创建新用户和新数据库以后,就要以新用户的名义登录数据库,这时使用的是psql命令。
# psql -U root -d mydb -h 127.0.0.1 -p 5432
上面的命令你也可以这样写:
# psql -Uroot -dmydb -h127.0.0.1 -p5432
参数说明:
-U=数据库用户名,注意是大写的U;
-d=数据库名称;
-h=数据库服务器的IP;
-p=数据库服务器的端口号;
还有一种简单的写法(但是需要你的系统用户名同时也是PostgreSQL的用户):
# psql mydb
这只有在本机连接的时候可用,远程连接是不行的。
直接执行“psql”试试:
# psql
psql: FATAL: database "root" does not exist
根据提示你能猜到什么?
如果你的系统用户名同时也是PostgreSQL的用户,而且同时存在一个同名的数据库,那么只需要执行“psql”就可以登录了。
# help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h 查看SQL命令帮助
\? 查看psql命令帮助
\g 或以分号终止执行查询
\q 退出
常用命令:
\l:列出所有数据库
\c [database_name]:连接其他数据库
\d:列出当前数据库的所有表格
\d [table_name]:列出某一张表格的结构
\du:列出所有用户
数据库操作:
基本的数据库操作,就是使用标准的SQL语言。
# 创建新表
CREATE TABLE table_name(id int, name varchar(20);
# 表格更名
ALTER TABLE table_name RENAME TO new_table_name;
# 删除表格
DROP TABLE IF EXISTS table_name;
# 插入数据
INSERT INTO table_name(id, name) VALUES('1', '张三');
# 选择记录
SELECT * FROM table_name;
# 更新数据
UPDATE table_name set name = '李四' WHERE name = '张三';
# 删除记录
DELETE FROM table_name WHERE name = '李四' ;
# 添加栏位
ALTER TABLE table_name ADD column_name varchar(40);
# 更新结构
ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
# 更名栏位
ALTER TABLE table_name RENAME COLUMN column_name TO signup;
# 删除栏位
ALTER TABLE table_name DROP COLUMN column_name;
在使用 SSH 客户端工具如 XShell 连接 Linux 系统时,你可能会遇到以下错误:
ERROR: invalid byte sequence for encoding "UTF8": 0xd5 0xc5