PostgreSQL 新手入门

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: PostgresQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。

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”可以查看基本的帮助

# 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


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 Linux 数据库
|
关系型数据库 Linux 数据库
|
9月前
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
739 1
|
9月前
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
1062 2
|
11月前
|
SQL 关系型数据库 Linux
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
543 0
|
8月前
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
|
8月前
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
596 4
|
9月前
|
SQL 存储 人工智能
NineData已支持「最受欢迎数据库」PostgreSQL
NineData 也在近期支持了 PostgreSQL,用户可以在 NineData 平台上进行创建数据库/Schema、管理用户与角色、导出数据、执行 SQL 等操作。另外,NineData SQL 开发企业版,还可以统一管理企业内部 PostgreSQL 的访问、规范与流程、变更发布等。
311 0
NineData已支持「最受欢迎数据库」PostgreSQL
|
9月前
|
存储 Cloud Native 关系型数据库
云原生之使用docker部署Postgresql数据库
云原生之使用docker部署Postgresql数据库
320 0
云原生之使用docker部署Postgresql数据库
|
9月前
|
JSON 安全 关系型数据库
PostgreSQL的优势:为何它成为主流数据库管理系统
PostgreSQL的优势:为何它成为主流数据库管理系统
533 0