PostgreSQL是加州大学伯克利分校计算机系开发的对象关系型数据库管理系统,目前拥有活跃的开源社区贡献,最近排名也不断前进,pgsql中其实有很多有点和设计理念都要比mysql更好一些,比如稳定性比较强;高并发读写情况下性能依然较好;支持丰富的几何类型并且在GIS领域地位领先;text支持各种长度,无需区分;nosql特性,支持array和json存储和搜索等,因为这些优点,pgsql应用场景也不断扩展,下面详细写一下pgsql入门的第一步,即先将pgsql安装至操作系统,过程如下:
1. 下载软件包
pgsql有很多类型的包,对于不同linux发行版都有对应的编译好的包,安装很方便,另外如果对于通用的linux平台可以编译源码安装或者安装官方编译好的二进制包,源码包的安装仅仅比二进制安装多出一个编译步骤,其余的都一样,所以这里使用安装方式是安装编译好的二进制包
pgsql官网地址:https://www.postgresql.org/,进入后点击download就来到下载页,这里点击Linux下面的Other Linux选项,然后点击下方的tar.gz archive下载二进制归档,
然后就来到最终的pgsql下载页了,地址为:https://www.enterprisedb.com/download-postgresql-binaries,如下图下载最新版本的10.1
如上图根据机器的位数下载对应的包,我这里下载的是x86-64的包,为:postgresql-10.1-1-linux-x64-binaries.tar.gz,下载之后准备安装
2. 安装并初始化
解压数据库并放到指定目录:
tar -xvzf postgresql-10.1-1-linux-x64-binaries.tar.gz# 解压出来之后目录为pgsqlmv pgsql/ /monchickey/
现在pgsql的安装目录就是/monchickey/pgsql
创建pgsql用户并设置密码:
useradd postgrespasswd postgres# 两次输入密码并确认
注意:这里设置密码是linux用户postgres的登录密码,不是pgsql服务器的密码
创建pgsql数据目录: mkdir /monchickey/pgsql_data
给postgres用户授权目录访问权限: chown postgres /monchickey/pgsql_data/
然后切换到postgres用户来操作数据库,pgsql数据库就以postgres为默认用户,执行: su - postgres 切换
切换之后建议修改~/.bash_profile将pgsql的bin目录加至环境变量中,方便直接使用pgsql相关命令,下面初始化数据库:
/monchickey/pgsql/bin/initdb -D /monchickey/pgsql_data/
等待执行完毕,没什么问题就初始化成功了,提示如下:
如图根据提示可以启动数据库: /monchickey/pgsql/bin/pg_ctl -D /monchickey/pgsql_data/ -l logfile start 这里-l指定日志文件位置,这里直接输出在家目录下的logfile中,这个可以自己指定,这里-D指定数据目录,默认如果不加数据目录直接报错找不到,可以刚才说的环境变量配置文件中~/.bash_profile加入一行: export PGDATA=/monchickey/pgsql_data 然后source进去即可,这样pgsql会自动去找PGDATA环境变量值,找不到才会报错
启动之后此时执行: ps -ef | grep postgres 就可以看到相关进程如下:
pgsql默认的端口号为5432,通过netstat命令或者lsof命令都可以看到监听情况:
现在可以看到pgsql默认监听的是localhost或127.0.0.1,目前只能本机访问,如果远程访问就连接不上了,具体的配置文件是data目录下的postgresql.conf,可以通过修改这个配置文件来调整各个参数,比如:listen_addresses可以修改绑定的地址,默认是localhost,port可以修改监听的端口号,默认是5432,max_connections可以修改最大客户端连接数量,默认是100等等,这里就不再详细说了
停止postgresql的命令为: /monchickey/pgsql/bin/pg_ctl -D /monchickey/pgsql_data/ stop
3. 命令行界面简单操作
pgsql和mysql一样可以通过交互式提示符连接操作,连接方式如下:
./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 可以查看当前数据库下的所有表:
创建一个简单的数据表可以执行下面的命令:
CREATE TABLE student ( id integer NOT NULL, name character(32), number char(5), CONSTRAINT student_pkey PRIMARY KEY (id));
创建表之后可以使用 \d student; 查看表的详细信息,如下:
现在可以插入一条测试数据: INSERT INTO student (id, name, number) VALUES (1, '张三', '1023');
然后可以查询这条数据: SELECT * FROM student WHERE id=1;
最后可以执行 \q 退出交互式界面
文章摘自:https://www.cnblogs.com/freeweb/p/8006639.html
Linux下PostgreSQL数据库安装、配置与日常服务管理
1. 数据库安装与配置步骤
安装环境准备
操作系统: Oracle Linux Server 6.5
IP 地址: 192.168.6.177
版本信息: MySQL Community Server 5.7.18
安装方式: RPM包
下载安装包
访问PostgreSQL网站
PostgreSQL网站根据操作系统类型和版本下载相应的安装包
需要下载以下的安装包:
postgresql96-9.6.3-4PGDG.rhel6.x86_64.rpm
postgresql96-contrib-9.6.3-4PGDG.rhel6.x86_64.rpm
postgresql96-libs-9.6.3-4PGDG.rhel6.x86_64.rpm
postgresql96-server-9.6.3-4PGDG.rhel6.x86_64.rpm
安装PostgreSQL
将Postgres安装包放置在同一个文件夹中, 执行安装命令
[root@DB-Server-Node1 ~]# rpm -ivh postgresql96-*.rpmPreparing... ########################################### [100%]1:postgresql96-libs ########################################### [ 25%]2:postgresql96 ########################################### [ 50%]3:postgresql96-contrib ########################################### [ 75%]4:postgresql96-server ########################################### [100%]
安装文件夹说明
通过RPM包安装, Postgres安装程序会在/var和/usr下创建文件夹。
/var/lib/pgsql: 用于存放Postgres数据库默认的数据文件夹
/usr/pgsql-${version}: 用于存放Postgres数据库的命令、依赖库及文档目录等信息将Postgres命令加入系统路径
修改/etc/profile文件, 将Postgres命令加入系统路径,并测试
[root@DB-Server-Node1 ~]# vi /etc/profile... ...# 在文件最后加入以下语句export PATH=$PATH:/usr/pgsql-9.6/bin# 保存退出后, 执行source命令, 让配置即时生效[root@DB-Server-Node1 ~]# source /etc/profile# 测试Postgres命令[root@DB-Server-Node1 share]# postgres --versionpostgres (PostgreSQL) 9.6.3
初始化数据库
使用Postgres数据库默认的数据文件存储目录
CentOS 6/RedHat 6/Oracle Linux 6
[root@DB-Server-Node1 bin]# service postgresql-9.6 initdb或者[root@DB-Server-Node1 bin]# /etc/init.d/postgresql-9.6 initdb
CentOS 7/Redhat 7/Oracle Linux 7
[root@DB-Server-Node1 bin]# /usr/pgsql-9.6/bin/postgresql96-setup initdb
使用自定义的数据存储目录
# 创建数据存储目录mkdir -p /data/postgres# 修改目录权限 chown -R postgres:postgres /data/postgres# 初始化数据库su -l postgres -c "/usr/pgsql-9.6/bin/initdb --no-locale -U postgres -E utf8 -D /data/postgres -W"
添加Postgres环境变量(可选)
[root@DB-Server-Node1 ~]# vi /etc/profile ... ... # 添加Postgres环境变量 PGDATA=/data/postgresPGHOST=127.0.0.1PGDATABASE=postgresPGUSER=postgresPGPORT=5432export PGDATA PGHOST PGDATABASE PGUSER PGPORT
修改/etc/init.d/postgresql-9.6中的变量(使用自定义数据目录)
如果使用自定义数据存放目录,而不是使用PostgreSQL默认数据目录时, 需要修改启动文件中的PGDATA变量,将PGDATA目录指向自定义的数据目录, 这样在使用
service posgresql-9.6 start
命令时才能正确启动。[root@DB-Server-Node1 ~]# vi /etc/init.d/postgres-9.6# 修改默认文件目录到指定的数据目录PGDATA=/data/postgres# 保存后退出:wq!
配置数据库访问
修改postgres.conf文件
主要配置参数详解:
listen_addresses='localhost'
Postgresql监听的网卡ip,默认仅仅本地,可以配置多个,使用“,”分割。“*” 代表所有的网卡ipport=5432
Postgres服务端口max_connections=100
最大服务器连接数superuser_reserved_connections=3
为管理员保留的专用连接数,普通用户无法使用这些连接,不能大于max_connectionsauthentication_timeout=60s
登录验证超时时间设置ssl=false
是否使用SSL进行连接password_encryption=true
当使用create user、alter user管理用户时,如果没有显示进行加密与否的限定,postgresql服务器是否自动进行密码加密shared_buffers=32m
共享缓存,非常重要的性能参数,其最小值为(128k,16k*max_connections)max_prepared_transactions=5
最大并行prepared 事务,如果为0,则禁止使用prepared事务,最大值与max_connections相同temp_buffers=8m
每个会话可以使用的临时(表)缓存大小work_mem=1m
指定内部排序、连接、group等等时,postgresql可以使用的内存大小,超过该值,将使用磁盘临时文件; 实际使用的内存和该类操作同时执行的数目相乘maintenance_work_men=16m
维护语句vacuum、create index等等可以使用的内存大小; 实际使用的内存和该类操作同时执行的数目相乘fsync=on
(物理数据)日志必须同步写入磁盘
可能导致严重的性能损失,却能确保最高的日志数据安全。synchronous_commit=on
(逻辑事务数据)日志必须同步写入磁盘,如果设为on,会立即调用fsync,相当于设置了fsync=onfull_page_writes=on
写整页wal_buffers=64K
WAL日志缓存大小wal_writer_delay=200ms
将wal日志从wal_buffer中写入磁盘的时间周期commit_delay=0ms
事务日志commit后,写入磁盘的延时。这个设置只有在commit_sibings(并行的多个排队事务)在延时内存在是才有效commit_siblings=5
并行事务数
修改pg_hba.conf
[root@DB-Server-Node1 ~]# vi pg_hba.conf ... ... # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 192.168.6.0/24 trust # IPv6 local connections: host all all ::1/128 trust
配置说明:
格式:
TYPE DATABASE USER ADDRESS METHOD
参数:
TYPE: 值为local和host, Local值表示为主机Socket连接, host代表允许的主机地址连接
DATABASE: 允许访问的数据库名, all代表允许全部数据库
USER: 表示允许哪个用户访问数据库, all代表所有用户都可以访问
ADDRESS: 表示允许连接的主机信息,可以使用主机IP地址, 也可以使用网段来表示,如
192.168.1.0/24
表示192.168.1.0网段可以连接METHOD: 连接方法, 通常使用的值为md5和trust
启动数据库并测试数据库
启动Postgres数据库
[root@DB-Server-Node1 init.d]# service postgresql-9.6 startStarting postgresql-9.6 service: [ OK ]
测试数据库
使用psql命令进行测试。
psql命令详解:
-h host, 指定连接的Postgres数据库IP地址
-U username: 指定连接数据库的用户名
-d database: 指定连接的数据库名
-p port: 指定数据库连接的服务端口
-w: 表示不提示用户输入密码
-W : 表示验证数据库用户密码
-l : 表示列出Postgres可用的数据库信息
示例如下:
[root@DB-Server-Node1 9.6]# psql -h localhost -U postgres -d postgres -WPassword for user postgres: psql (9.6.3)Type "help" for help.postgres=#
修改用户密码
使用默认脚本
service postgresql initdb
或/usr/pgsql-9.6/bin/postgresql96-setup initdb
初始化数据库时,需要修改用户的密码。在修改Postgres用户密码时,需要确保以下条件:配置"pg_hba.conf"时需要确定服务器本地址的验证方法为trust, 即:
host all all 127.0.0.1/32 trust
如果为peer|indent|md5方法时,需要将其修改为trust, 否则登录时会提醒输入用户密码。切换系统用户为postgres, 通过
psql -h localhost -U postgres -d postgres
登录Postgres数据库,进入数据后,使用alter user postgres with password '设置的新密码'
来为用户修改默认密码。示例如下:
[root@DB-Server-Node1 9.6]# su - postgres-bash-4.2$ psql -h localhost -U postgres -d postgres -wPassword for user postgres: psql (9.6.3)Type "help" for help.postgres=# alter user postgres with password '123456';ALTER ROLEpostgres=#
设置服务开机自启动
chkconfig postgresql-9.6 on
2. Postgres日常服务管理
启动数据库:pg_ctl start -D /data/postgres
重启数据库: pg_ctl restart -D /data/postgres
停止数据库:pg_ctl stop -D /data/postgres
强制重启:pg_ctl restart -D /data/postgres -m f
强制停止:pg_ctl stop -D /data/postgres -m f
加载配置:pg_ctl reload -D /data/postgres
显示服务状态:pg_ctl status -D /data/postgres
连接数据库: psql -h 127.0.0.1 -U postgres -p 5432 -d postgres -W
linux中mv命令使用详解
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
1.命令格式:
mv [选项] 源文件或目录 目标文件或目录
2.命令功能:
视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
3.命令参数:
-b :若需覆盖文件,则覆盖前先行备份。
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新(update)
-t : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
4.命令实例:
实例一:文件改名
命令:
mv test.log test1.txt
输出:
文章摘自:https://www.linuxidc.com/Linux/2017-11/148411.htm
Linux下su与su -命令的区别
在启动服务器ntpd服务时遇到一个问题
使用 su root 切换到root用户后,不可以使用service命令;
使用 su - 后,就可以使用service命令了。
原因:
su命令和su -命令区别就是:
su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su -连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。
su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。
用echo $PATH命令看一下su和su - 后的环境变量已经变了。
以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。