Linux 安装 PostgreSQL 教程
Linux PostgreSQL 卸载安装教程和使用方法
卸载
sudo apt-get --purge remove postgresql\*
# 删除用户
userdel -rf postgres
安装教程
自动安装
1、设置系统环境变量 (可以跳过,推荐跳过)
网上说这么做能让 postgresql 将数据库编码默认为 utf-8。但是好像一点用都没有,我为此把 postgresql 卸载重装了n遍,每次数据库编码都默认为 LATIN1。所以我不推荐这么做,安装好后,可以手动修改数据库默认编码。
在文件/etc/profile 末尾添加如下代码:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8
执行并检查,确认设置已生效。防止安装的数据库编码为拉丁文,不支持中文。
source /etc/profile
locale # 列出变量
2、自动安装
apt-get install postgresql
# 如果找不到资源,更新 apt-get
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
3、进入数据库
postgresql 在 Linux 上自动创建了一个系统用户和一个的数据库用户,用户名都是 postgres 。要进入数据库,必须先登录系统用户 postgres,再登录数据库用户。
# 切换系统用户
sudo su - postgres
# 进入数据库,默认使用系统用户名登录数据库,所以无需指定用户名。
psql
# 如果数据库进不去,可能数据库启动失败,手动启动也失败,只能卸载重装(很快的)
可通过命令行前缀知道当前所在环境:
Linux 的 超级用户命令行前缀:用户名@主机名: # ;普通用户命令行前缀:用户名@主机名: $
PostgreSQL 的 超级用户命令行前缀:数据库名=#;一般用户:数据库名=>
4、修改数据库编码
进入数据库,输入命令 \l
查看全部数据库。可以看见三个数据库,其编码 Encoding 都是 LATIN1, 即拉丁文。创建数据库时,其实是拷贝一份 template1 数据库,所以只需要修改 template1 的编码,以后创建数据库就默认是 utf-8 了。
# 修改数据库编码。注意这是一个命令,SQL 语法允许分行,命令以分号结束。
update pg_database
set (encoding, datctype, datcollate)=(6, 'en_US.UTF8','en_US.UTF8')
where datname = 'template1';
源码安装(不推荐)
源码安装教程不是我写的,我也没实践过,不知道效果,只是复制到这里备用。
1、下载安装包 下载地址 2、上传安装包到服务器上 3、解压安装包
tar -xvzf postgresql-10.1-1-linux-x64-binaries.tar.gz
解压出来之后目录为pgsql 4、移动解压文件到指定目录 在opt目录下创建一个pgsql的文件夹,将刚才解压的文件复制到这个目录下 现在pgsql的安装目录就是/opt/pgsql/pgsql 5、创建pgsql用户并设置密码
[root@localhost pgsql]# useradd postgres
[root@localhost pgsql]# passwd postgres
密码暂定123456 注意:这里设置密码是linux用户postgres的登录密码,不是pgsql服务器的密码。 6、创建数据目录
[root@localhost opt]# mkdir pgsql_data
8、然后切换到postgres用户来操作数据库,pgsql数据库就以postgres为默认用户。
[root@localhost opt]# su - postgres
9、配置环境变量,将pgsql的bin目录加至环境变量中,方便直接使用pgsql相关命令。
[postgres@localhost ~]$ vim /etc/profile
然后数据 i 进入编辑模式,在文件的最后一行加入pgsql的bin的目录
export PGDATA=/opt/pgsql/pgsql/bin
然后Esc,退出编辑模式
:wq # 保存并退出
如果出现下面的情况,说明当前用户没有权限,需要切换成root用户,然后再重新操作一遍即可。 然后刷新文件
source /etc/profile
10、初始化数据库 先切换成postgres用户 我现在已经进入到了/opt/pgsql/pgsql 的目录下了 然后执行初始化数据库的命令
[postgres@localhost pgsql]$ bin/initdb -D /opt/pgsql_data/
等待执行完毕,没什么问题就初始化成功了,会出现以上的提示,最后会出现这个命令,就是让你用这个命令就可以启动数据库了,下一步做启动的具体说明。 bin/pg_ctl -D /opt/pgsql_data/ -l logfile start
这里-l指定日志文件位置,这里直接输出当前目录下的logfile中,这个可以自己指定,这里-D指定数据目录,默认如果不加数据目录直接报错找不到,可以在环境变量配置文件中加入一行: export PGDATA=/opt/pgsql_data 然后source刷新即可,这样pgsql会自动去找PGDATA环境变量值,找不到才会报错。 11、启动数据库
bin/pg_ctl -D /opt/pgsql_data/ -l logfile start
启动的时候如果报下面这个错误,说明权限不够, 执行这个命令进行赋权,注意要在root的用户下操作。
[root@localhost opt]# chmod -R 777 pgsql
然后再次执行启动的命令,ok,数据库启动成功。 执行查看进程的命令查看
[postgres@localhost pgsql]$ ps -ef | grep postgres
就可以看到相关进程如下: pgsql默认的端口号为5432,通过netstat命令或者lsof命令都可以看到监听情况:
[postgres@localhost pgsql]$ lsof -i:5432
[postgres@localhost pgsql]$ netstat -an | grep 5432
现在可以看到pgsql默认监听的是localhost或127.0.0.1,目前只能本机访问,如果远程访问就连接不上了,具体的配置文件是data目录下的postgresql.conf,可以通过修改这个配置文件来调整各个参数,比如:listen_addresses可以修改绑定的地址,默认是localhost,port可以修改监听的端口号,默认是5432,max_connections可以修改最大客户端连接数量,默认是100等等。
停止postgresql的命令为:
/opt/pgsql/pgsql/bin/pg_ctl -D /opt/pgsql_data/ stop
12、配置远程连接的操作 使用命令
find / -name postgresql.conf
找到 postgresql.conf
[postgres@localhost pgsql_data]$ vim postgresql.conf
然后再数据命令
/listen_addresses
查找listen_addresses所在位置 修改参数: 修改pg_hba.conf文件的内容:
[postgres@localhost pgsql_data]$ vim pg_hba.conf
可访问的用户ip段 在文件末尾加入:
host all all 0.0.0.0/0 md5
然后再重新启动数据库使之生效即可。 停止postgresql的命令为:
/opt/pgsql/pgsql/bin/pg_ctl -D /opt/pgsql_data/ stop
启动postgresql的命令为:
/opt/pgsql/pgsql/bin/pg_ctl -D /opt/pgsql_data/ -l logfile start
查看进程
ps -ef | grep postgres
将端口添加到防火墙
firewall-cmd --permanent --add-port=5432/tcp
重启防火墙
systemctl restart firewalld
13、命令行界面简单操作 pgsql和mysql一样可以通过交互式提示符连接操作,连接方式如下:
/opt/pgsql/pgsql/bin/psql -h 127.0.0.1 -d postgres -U postgres -p 5432
其中-h参数指定服务器地址,默认为127.0.0.1,默认不指定即可,-d指定连接之后选中的数据库,默认也是postgres,-U指定用户,默认是当前用户,-p 指定端口号,默认是"5432",其它更多的参数选项可以执行: ./bin/psql --help 查看 登录进去默认界面如下所示: 命令提示符前面的就是当前的数据库,使用 \l 查看当前的数据库列表 默认postgres,template0和1这3个库是不允许操作的,创建新的数据库执行:
CREATE DATABASE test WITH OWNER=postgres ENCODING='UTF-8';
这样就创建好了数据库test,然后可以执行命令:
\c test
切换当前数据库为test,然后执行
\d
可以查看当前数据库下的所有表: 创建一个简单的数据表可以执行下面的命令: 创建表之后可以使用
\d student;
查看表的详细信息,如下: 现在可以插入一条测试数据: INSERT INTO student (id, name, number) VALUES (1, ‘张三’, ‘1023’);
然后可以查询这条数据: SELECT * FROM student WHERE id=1; 最后可以执行
\q
退出交互式界面 14、如果远程连接报错: FATAL: password authentication failed for user “连接用户名” 解决方法 1、编辑pg_hba.conf,将md5认证修改成trust认证,编辑后退出保存 进入pgsql_data目录,然后编辑pg_hba.conf文件 2、执行pg_ctl reload加载生效,要进入bin目录下,再执行重新加载的命令 3、psql连接,用alter role修改密码 4、退出psql 5、编辑pg_hba.conf,将turst认证修改成md5认证,编辑后退出保存 6、执行pg_ctl reload加载生效
以上就是安装的详细步骤,以及我安装中出现的问题和解决的方案,希望能够帮助你们。
使用
postgresql 有两套命令,一套在linux 终端上,一套在 数据库 shell 上称为 SQL 语句。
数据库中使用的命令,是一套完整的 SQL 语句。
\l
: 列出数据库
\c databasename
切换数据库
\conninfo
: 查看当前数据库连接信息:用户、端口号、IP
\d
: 列出表格
create database name
创建数据库,默认属于当前用户。使用 template1 创建。
drop database name
删除数据库
Linux postgresql 数据库操作命令
createuser name
:创建数据库用户
psql -c "ALTER USER ubantu WITH PASSWORD '123456'"
为用户修改密码
psql -d dbname -U username
: 进入数据库shell
详细教程见菜鸟教程:https://www.runoob.com/postgresql/postgresql-syntax.html