您的位置:首页 > 运维架构 > Linux

在CentOS上编译安装PostgreSQL

2016-12-15 21:35 459 查看
https://my.oschina.net/tashi/blog/189351

第一步:准备阶段

获取必需软件包:

CentOS中查看是否安装了某个软件的命令:rpm -qa | grep 软件名。

which命令可查看某个软件的安装路径。

使用 yum install 包名 来安装软件包。

1.GNU make的版本3.80以上

[root@localhost ~]# rpm -qa | grep make

make-3.81-20.el6.x86_64

[root@localhost ~]# make -v

GNU Make 3.81

[root@localhost ~]# which gcc

/usr/bin/gcc

2.ISO/ANSI编译器,推荐最新版本的GCC

[root@localhost ~]# rpm -qa | grep gcc

gcc-4.4.7-4.el6.x86_64

libgcc-4.4.7-4.el6.x86_64

gcc-c++-4.4.7-4.el6.x86_64

[root@localhost ~]# gcc -v

gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)

3.源码包的解压工具tar,除此之外还有gzip或bzip2

[root@localhost ~]# rpm -qa | grep tar

libtar-1.2.11-17.el6_4.1.x86_64

tar-1.23-11.el6.x86_64

[root@localhost ~]# tar --version

tar (GNU tar) 1.23

4.默认使用GNU Readline库

[root@localhost ~]# rpm -qa | grep readline

readline-6.0-4.el6.x86_64

5.默认使用zlib压缩库

[root@localhost ~]# rpm -qa | grep zlib

zlib-1.2.3-29.el6.x86_64

6.可选软件包:

可选软件包(详细见文档:http://www.postgresql.org/docs/9.3/interactive/install-requirements.html):

(1)为了编译PL/Perl服务器端编程语言,需要完整Perl的安装,包括libperl库和头文件。

(2)为了编译PL/Python服务器端语言,需要一个包含头文件和distuils模块的Python安装。

(3)为了编译PL/Tcl服务器端语言,需要Tcl的安装。

(4)为了使用NSL,即具有使用不同于英语的一种语言显示消息的能力,需要一种Gettext API的实现。

(5)需要Kerberos, OpenSSL, OpenLDAP, and/or PAM,如果你想要使用这些服务支持认证或加密。

(6)为了编译PostgreSQL的文档,有一组独立的要求。查看http://www.postgresql.org/docs/9.3/interactive/docguide-toolsets.html

第二步:获取并解压缩PostgreSQL源码及目录简介

1.下载源码:官网:http://www.postgresql.org/ftp/source/,这里下载的是最新版9.3.2.



2.解压:

tar -zxvf postgresql-9.3.2.tar.gz

随后会生成一个新的文件夹postgresql-9.3.2。(如果要压缩则参数为:-zcvf)

3.源码目录结构简介:

进入解压目录:cd postgresql-9.3.2,查看其结构



(1)configure:源码安装的配置脚本

查看配置脚本支持的参数:./configure --help



(2)configure.in:configure文件的雏形

(3)COPYRIGHT:版权信息

(4)Makefile:Makefile模版

(5)GUNMakefile.in:Makefile的雏形

(6)HISTORY:版本变更的历史记录

(7)INSTALL:安装简要说明

(8)README:简单说明

(9)aclocal.m4:config用的文件的一部分

(10)config/:config用的文件的目录,存放了一些系统的配置文件,如c-compiler.m4文件中提供了检测C编译器的宏

(11)contrib/:已打包到PG源码中的第三方贡献的插件源码



第三方插件简介:

adminpack:一些管理函数

auth_delay:认证失败后延迟报异常,可以防止暴力破解

auto_explain:将超过指定执行时间的SQL的执行计划输出到日志中

btree_gin:gin索引方法的btree操作符扩展(在某些情况下“多列gin组合索引”比“多个btree单列索引”的bitmap anding更高效)

btree_gist:gist索引方法的btree操作符扩展(在组合索引中的某些列类型仅支持gist索引访问方法,而另一些列的类型支持btree以及gist时btree_gist更为有效,同时btree_gist还新增了<>用于排他约束,<->用于近邻算法)

chkpass:自动加密的字段类型(使用UNIX标准函数crypt()进行封装,所以仅支持前8位安全)'abcdefghijkl'::chkpass--'abcdefgh'

citext:不区分大小写的数据类型

cube:多维立方体类型,支持多维立方体对象的相同,相交,包含等运算

dblink:PostgreSQL跨库操作插件

dict_int:全文检索的一个字典模版,用于控制数字被拆分的最大长度,以控制数字在全文检索中的分词个数(maxlen=6:12345678 --> 123456截断成6个,rejectlong=true则忽略这个分词)

dict_xsyn:全文检索的一个字典模块,设置分词的同义词,支持同义词匹配

dummy_seclabel:用于安全标签SQL的测试

earthdistance:可以使用cube或point类型计算地球表面两点之间的距离

file_fdw:文件外部表模块

fuzzystrmatch:单字节字符串之间的相似性判断

hstore:用于存储K-V数据类型,同时这个插件还提供了比较V类型相关的函数和操作符。例如提供数组,json,hstore之间的转换,K-V的存在判断,删除K-V值

intagg:int类型的数组聚合函数(内建的array_agg函数已包含这个功能)

intarray:int类型的数组功能扩展库,提供了一些常用的函数和操作符(数组元素个数,元素排序,元素下标,取元素子集,相交,包含,增加元素,删除元素,合并等)

isn:提供国际通用的产品标识码数据类型,例如ISBN,ISMN...

lo:大对象的一个可选模块,lo类型以及自动unlink大对象的触发器,方便大对象在消亡后的自动unlink,防止大对象存储泄漏(类似内存泄漏)

ltree:异构数据类型以及操作函数和操作符。例如China.Zhejiang.Hang<@'China'

oid2name:id转换成name的命令行工具,不属于extension。或通过系统表查询得到.

pageinspect:用于读取数据库PAGE裸信息的插件,可以读main,fsm,vm FORK的页数据,一般用于debug(使用时请参照对应数据库版本的头文件解读信息)

passwordcheck:创建用户或者修改用户密码时,检查密码的安全性,如果太弱的话,将返回错误。

pg_archivecleanup:清除归档文件的命令,不属于extension

pgbench:数据库性能测试的命令,不属于extension

pg_buffercache:输出当前的shared buffer的状态数据(细化到page number)

pgcrypto:PostgreSQL的服务端数据加密的扩展库

pg_freespacemap:输出对象指定page或所有page的free space map信息

pgrowlocks:(从行头信息中的informask获取行锁信息),注意输出的不是snapshot

pg_standby:8.4以及以前的版本方便于创建warm standby的命令行

pg_stat_statements:跟踪数据库的SQL,收集SQL的统计信息

pgstattuple:行级统计信息(dead tuples,live tuples,table_len,free_space,free_percent),索引的统计信息

pg_test_fsync:测试磁盘的fsync速率。适用于选择最快的wal_sync_method

pg_test_timing:测试系统定时器的开销,开销越大,explain analyze时间结果越不准,需要调整系统时钟源

pg_trgm:将字符串拆分成3个一组的多个单元,用于测试两个字符串之间的近似度,比分词更加暴力。

pg_upgrade:跨大版本的升级工具(例如9.0-->9.1)

pg_upgrade_support:pg_upgrade用到的服务端函数集

pg_xlogdump:从xlog中dump出一些易读的底层信息

postgres_fdw:postgresq跨库的外部表插件

seg:线段类型和浮点数的区间类型,以及相关的操作符,索引访问方法等

sepgsql:基于SELinux安全策略的访问控制模块

spi:一些服务端的触发器函数(例如跟踪记录的存活时间,被哪个用户修改了,记录的修改时间等)

sslinfo:输出ssl认证的客户端的一些认证信息

start-scripts:数据库启动脚本模版

tablefunc:一般可用于行列变换,异构数据处理等

tcn:提供异步消息输出的触发器

test_parser:全文检索中的一个自定义parser的测试插件

tsearch2:全文检索相关的插件,在全文检索未引入PG内核前的PG版本可以使用这个插件来实现全文检索功能,大于8.3以后就不需要这个了

unaccept:全文检索相关的插件

uuid-ossp:生成UUID的插件

vacuumlo:大对象垃圾回收的命令

worker_spi:9.3新增的服务端worker编程范例

xml2:xml相关插件

(12)doc/:文档目录

(13)src/:源代码目录,存放了PG的核心代码



src目录简介:

DEVELOPERS:面向开发人员的注视

Makefile:Makefile 

Makefile.global.in:make的设定值(从configure生成的)

Makefile.shlib:共享库用的Makefile

nls-global.mk:信息目录用的Makefile文件的规则
backend/:数据库引擎代码,数据库各个功能进程代码,系统存储部分代码,事务处理代码,查询优化部分代码等。PG最重要的代码都位于此目录

bin/:数据库外围工具代码,如initdb,psql,pg_dump等的代码

include/:系统依赖的头文件统一按照c文件的目录结构组织在include目录下

interfaces/:数据库系统提供的对外接口,如libpq。但是如ODBC、JDBC等不在这个目录,它们作为独立的项目存在

makefiles/:存放了针对不同操作系统编译所使用的makefile文件

pl/:pg提供的存储过程,包括tcl、perl、python三种脚本语言支持的存储过程和PL/pgSQL支持的存储过程

port/:平台移植相关的代码,对src\bin下的工具提供的基本函数的支持,编译后的样式是一个lib库

template/:针对不同操作系统提供的一些脚本样例

test/:各种测试脚本,PG提供的回归测试用例和自动化测试框架

timezone/:时区相关代码(从http://www.iana.org/time-zones同步的时区库)

tools/:辅助开发工具

tutorial/:PG提供的部分示例,如如何写PG认识的SQL,如何写PG风格一致的C代码等

backend目录结构简介:



access/:数据访问层(很重要的目录),存放了和索引相关以及事务处理相关的代码:各种存储访问方法(在各个子目录下) common(共同函数)、gin (Generalized Inverted Index通用逆向索引)、gist
(Generalized  Search Tree通用索引)、 hash (哈希索引)、heap (heap的访问方法)、index (通用索引函数)、 nbtree (Btree函数)、transam (事务处理)。本层之下,是数据缓冲区,再下层,是真正的数据存储层。

bootstrap/:初始化数据库时要使用的代码,和src\bin\initdb下的initdb工具紧密相关。

catalog/:PG提供的针对系统表的操作代码,包含用于操作系统表的专用函数。

parser/:编译器,对SQL语句进行解析的代码(注意gram.y文件)。即将SQL查询转化为内部查询树。
optimizer/:查询优化器,根据查询树创建最优的查询路径和查询计划。

executor/   执行器(访问的执行),执行来自Optimizer的查询计划。与commands目录中的代码联合完成查询处理功能。

commands/:执行非计划查询的SQL目录,如create table命令等。SQL命令被解析后执行具体命令时对应的操作代码(SELECT/INSERT/UPDATE/DELETE以外的SQL文的处理)

tcop/:postgres服务进程(数据库引擎的进程)的主要部分,它调用Parser、Optimizer、Executor和Commands中的函数来执行客户端提交的查询。

foreign/:FDW(Foreign Data Wrapper)处理

lib/:共同函数,字符串处理和链表处理辅助函数。
libpq/:处理与客户端间的通信,几乎所有的模块都依赖它。如:同身份认证或口令识别相关代码,以进行安全的网络通讯。如ssl,md5等等。

main/:主程序模块,它负责将控制权转到Postmaster进程或Postgres进程。PG的main函数所在。PG启动入口。

nodes/:定义系统内部所用到的节点、链表等结构,以及处理这些结构的函数。

po/:实现国际化(i18n)功能的一部分。把一些数据库的提示信息国际化。

port/:平台兼容性处理相关函数。屏蔽一些不同操作系统在一些实现上的差别。如windows上的socket、darwin系统上对system函数的支持、sunos4系统对于float类型的支持等。

postmaster/:监听用户请求的守护进程,并控制Postgres进程的启动和终止。PG的主要进程。如主服务进程postmaster,归档进程pgarch等。

regex/:正则表达式库及相关函数,用于支持正则表达式处理。

replication/:streaming replication

rewrite/:查询重写,根据规则系统对查询进行重写。

snowball/:支持全文检索的代码
storage/:很重要的一个目录,有关物理存储系统相关代码。管理各种类型的存储系统(如磁盘、闪存等),即共享内存、磁盘上的存储、缓存等全部一次/二次记录管理:buffer/(缓存管理)、 file/(文件)、freespace/(Fee Space Map管理) ipc/(进程间通信)、large_object /(大对象的访问函数)、
lmgr/(锁管理)、page/(页面访问相关函数)、 smgr/(存储管理器)。

tsearch/:全文检索相关代码

utils/:各种支持函数,如错误报告、各种初始化操作等等。各种模块(目录):adt/(嵌入的数据类型)、cache/(缓存管理)、 error/(错误处理)、fmgr/(函数管理)、hash/(hash函数)、init/(数据库初始化、postgres的初期处理)、 mb/(多字节文字处理)、misc/(其他)、mmgr/(内存的管理函数)、 resowner/(查询处理中的数据(buffer pin及表锁)的管理)、sort/(排序处理)、time/(事务的
MVCC 管理)

backend等的代码的头文件包含在include里面。其组织虽然与backend的目录结构类似,但是并非完全相同,基本上来说下一级的子目录不再设下一级目录。例如backend的目录下面有utils这个目录,而util下面还有adt这个子目录,但是include里面省略了这个目录,变成了扁平的结构。

第三步:源码安装PostgreSQL

详细说明参考INSTALL文件或者http://www.postgresql.org/docs/9.3/interactive/install-procedure.html

步骤如下:

1.配置(Configuration)

进入源码目录:

[root@localhost backend]# cd ~/software/postgresql-9.3.

[root@localhost postgresql-9.3.2]# ./configure

这种默认的配置将编译服务器和使用工具,以及所有客户端应用程序和接口,只需要一个C编译器。所有文件默认将安装到/usr/local/pgsql中。

confiure命令的可选参数,参考:http://www.postgresql.org/docs/9.3/interactive/install-procedure.html

这里,我的配置是可选参数设置如下:

./configure --prefix=/opt/pgsql9.3.2 --with-pgport=5432 --with-perl --with-python --with-tcl --with-openssl --with-pam  --without-ldap --with-libxml  --with-libxslt  --enable-thread-safety  --with-wal-blocksize=16 --with-blocksize=16
--enable-dtrace --enable-debug

配置选项说明:

--prefix=/opt/pgsql9.3.2:安装所有文件在/opt/pgsql9.3.2中(取代默认时的/usr/local/pgsql)。

--with-pgport=5432:为服务器和客户端设置默认端口号。默认是5432。

--with-perl:编译PL/Perl服务端语言。

--with-python:编译PL/Python服务端语言。

--with-tcl:编译PL/Tcl服务端语言。

--with-openssl:编译支持SLL(加密)连接。这需要安装OpenSSL包。

--with-pam:编译支持PAM(Pluggable Authentication Modules,可插拔认证模块)

--without-ldap:编译支持认证和连接参数检查

--with-libxml:编译libxml(支持SQL/XML),支持这个选项需要Libxml 2.6.23及最新版

--with-libxslt:编译xml2模块,使用libxslt

--enable-thread-safety:让客户端库是线程安全的

--with-wal-blocksize=16:WAL:预写式日志(Write-Ahead Logging)

设置WAL的block size,以MB为单位。这是在WAL日志中的每个独立文件的大小。为了控制WAL日志传送的粒度去调整其大小,这可能是非常有用的。默认为16MB。这个值必须是2的1到64次方(MB)。注意,改变这个值需要一个initdb。

--with-blocksize=16:设置block size,以KB为单位。这是表的存储和IO单元。默认为8K,适用于大多数情况;但是在特殊场合中,其他的值可能是非常有用的。这个值必须是2的1到32次方(KB)。注意,改变这个值需要一个initdb。

--enable-dtrace:编译PostgreSQL支持动态跟踪工具DTrace

--enable-debug:把所有程序和库以带有调试符号的方式编译

--enable-nls[=LANGUAGES]:打开本地语言支持(NLS),即以非英文显示程序的信息的能力。LANGUAGES是一个空格分隔的语言代码列表,标识你想支持的语言。比如--enable-nls='de fr'。(你提供的列表和实际支持的列表之间的交集将会自动计算出来。)如果你没有声明一个列表,那么就安装所有可用的翻译。

(还可以在--enable-debug前,添加两个选项:--enable-depend --enable-cassert)

配置过程可能会遇到依赖的动态库缺失,  安装这些缺失的库即可。

记录下我这里的缺失lib的安装:

dtrace工具的安装:

PostgreSQL支持动态跟踪, 可以通过dtrace或者systemtap工具统计相关探针的信息。

在CentOS中安装systemtap:

在安装systemtap前,要保证kernel对应的kernel-devel包的版本保持一致:

检查:

[root@localhost ~]# rpm -qa|grep kernel

[root@localhost ~]# uname -a

不一致的话,则安装对应的kernel-devel版本或者升级kernel:

[root@localhost ~]# yum install kernel-devel

或:[root@localhost ~]# yum update kernel

重启服务器。

安装systemtap

[root@localhost ~]# yum install systemtap systemtap-sdt-devel

其中:

安装systemtap时,安装了systemtap-devel、systemtap-client和systemtap-runtime这3个包。
systemtap-sdt-devel是编译PostgreSQL时,选项--enable-dtrace需要的包。

使用命令:

[root@localhost ~]# rpm -qf /usr/bin/stap

systemtap-devel-2.3-4.el6_5.x86_64

systemtap-client-2.3-4.el6_5.x86_64

rpm -qf:查询文件隶属的软件包

检查stap是否正常

[root@localhost ~]# stap

A script must be specified.

Try '--help' for more information.

此时stap是正常的。接着测试下:

[root@localhost ~]# stap -ve 'probe begin { log("hello world") exit() }'

Pass 1: parsed user script and 96 library script(s) using 198456virt/26648res/3080shr/24072data kb, in 260usr/40sys/296real ms.

Pass 2: analyzed script: 1 probe(s), 2 function(s), 0 embed(s), 0 global(s) using 198852virt/27396res/3320shr/24468data kb, in 10usr/0sys/10real ms.

Pass 3: using cached /root/.systemtap/cache/ca/stap_ca2aff10c84d1cf00083e0eb3e5d7082_1033.c

Pass 4: using cached /root/.systemtap/cache/ca/stap_ca2aff10c84d1cf00083e0eb3e5d7082_1033.ko

Pass 5: starting run.

hello world

Pass 5: run completed in 40usr/80sys/404real ms.

stap调试好后,就可以用来跟踪postgresql了。

PostgreSQL编译时必须开启dtrace支持,即--enable-dtrace。

开启dtrace后,数据库将启用代码中的探针或跟踪点。

回到PG的继续重新执行configure,遇到问题以及解决方法:

(1)问题1:

no

configure: error: could not determine flags for linking embedded Perl.

This probably means that ExtUtils::Embed or ExtUtils::MakeMaker is not

installed.

解决方法:

yum install perl-ExtUtils-Embed

(2)问题2:

configure: error: readline library not found

If you have readline already installed, see config.log for details on the

failure. It is possible the compiler isn't looking in the proper directory.

Use --without-readline to disable readline support.

解决方法:

yum install readline readline-devel

(3)问题3:

checking for inflate in -lz... no

configure: error: zlib library not found

If you have zlib already installed, see config.log for details on the

failure. It is possible the compiler isn't looking in the proper directory.

Use --without-zlib to disable zlib support.

解决方法:

yum install zlib zlib-devel

(4)问题4:

checking for CRYPTO_new_ex_data in -lcrypto... no

configure: error: library 'crypto' is required for OpenSSL

解决方法:

yum install openssl openssl-devel

(5)问题5:

checking for pam_start in -lpam... no

configure: error: library 'pam' is required for PAM

解决方法:

yum install pam pam-devel

(6)问题6:

checking for xmlSaveToBuffer in -lxml2... no

configure: error: library 'xml2' (version >= 2.6.23) is required for XML support

解决方法:

yum install libxml2 libxml2-devel

(7)问题7:

checking for xsltCleanupGlobals in -lxslt... no

configure: error: library 'xslt' is required for XSLT support

解决方法:

yum install libxslt libxslt-devel

(8)问题8:

configure: error: Tcl shell not found

解决方法:

yum install tcl tcl-devel

(9)问题9:

checking for ldap.h... no

configure: error: header file is required for LDAP

解决方法:

yum install openldap openldap-devel

(10)问题10:

checking for Python.h... no

configure: error: header file <Python.h> is required for Python

解决方法:

yum install python python-devel

(11)问题11:

Error when bootstrapping CMake:

Cannot find appropriate C++ compiler on this system.

Please specify one using environment variable CXX.

See cmake_bootstrap.log for compilers attempted.

解决方法:

yum install gcc-c++

2.编译

Configure成功之后,执行编译:

[root@localhost postgresql-9.3.2]# gmake world

(make world安装包含了文档,所有的contrib)

3.安装

接着安装(带world参数可以安装PG的附属信息,如文档,帮助等):

[root@localhost postgresql-9.3.2]# gmake install-world

第四步:配置PG

1.新建普通用户,用于初始化数据库, 开启和关闭数据库

[root@localhost postgresql-9.3.2]# groupadd postgres

[root@localhost postgresql-9.3.2]# useradd -g postgres postgres

[root@localhost postgresql-9.3.2]# passwd postgres

2.创建数据库的数据目录并设置其权限

[root@localhost postgresql-9.3.2]# mkdir -p /db/pgdata

[root@localhost postgresql-9.3.2]# chown -R postgres:postgres /db/pgdata

3.设置环境变量

[root@localhost postgresql-9.3.2]# su - postgres

[postgres@localhost ~]$ vim ./.bash_profile

在文件最后添加:

# add PG env

export PGHOME=/opt/pgsql9.3.2

export PGDATA=/db/pgdata

export PATH=$PGHOME/bin:$PATH

export MANPATH=$PGHOME/share/man:$MANPATH

export LANG=en_US.utf8

export DATE=`date +"%Y-%m-%d %H:%M:%S"`

export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

alias rm='rm  -i'

alias ll='ls -lh'

#alias pg_start='pg_ctl start -D $PGDATA'

#alias pg_stop='pg_ctl stop -D $PGDATA -m fast'

 

#psql -h 主机名 -p 端口号 -U 用户名 -W(强制口令提示) [-d]数据库名

#psql -h $GHOST -p $PGPORT -U $PGUSER -W -d $PGDATABASE

#PGHOST 设置数据库服务器名。 如果它以一个斜杠开头,那么它声明一个 Unix 域套接字而不是 TCP/IP 通讯; 其值就是该套接字文件存储的目录(在缺省安装中,这个目录会是 /tmp)

#export PGHOST=$PGDATA

export PGHOST=localhost

#PGPORT 设置 TCP 端口号或者设置与 PostgreSQL 通讯的 Unix 域套接字的文件扩展。

export PGPORT=5432

export PGUSER=postgres #用于与数据库连接的用户名,initdb -U posgtres指定

#export PGDATABASE=demo#数据库名

修改环境变量后,可以重新登录该用户或者source .bash_profile让环境变量生效。

测试一下:

[postgres@localhost ~]$ source .bash_profile

[postgres@localhost ~]$ psql -V

psql (PostgreSQL) 9.3.2

第五步:初始化数据库集群

[postgres@localhost ~]$ initdb -D $PGDATA -E UTF8 --locale=C -U postgres -W

看到如下提示信息,表示初始化成功,下一步可以启动数据库了。

Success. You can now start the database server using:

    postgres -D /db/pgdata

or

    pg_ctl -D /db/pgdata -l logfile start

第六步:启动和关闭数据库

启动:

[postgres@localhost ~]$ pg_ctl start -D $PGDATA -l pgsql.log

server starting

[postgres@localhost ~]$ ls

pgsql.log

启动通过-l选项指定的日志,这里指定到当前路径下。也可以指定postgres用户具有可写权限的任何目录。

查看数据库状态:

[postgres@localhost ~]$ pg_ctl status

pg_ctl: server is running (PID: 2524)

/opt/pgsql9.3.2/bin/postgres "-D" "/db/pgdata"

查看数据库的后台进程:

[postgres@localhost ~]$ ps -ef | grep postgres

postgres  2524     1  0 17:26 pts/2    00:00:00 /opt/pgsql9.3.2/bin/postgres -D /db/pgdata

postgres  2526  2524  0 17:26 ?        00:00:00 postgres: checkpointer process

postgres  2527  2524  0 17:26 ?        00:00:00 postgres: writer process

postgres  2528  2524  0 17:26 ?        00:00:00 postgres: wal writer process

postgres  2529  2524  0 17:26 ?        00:00:00 postgres: autovacuum launcher process

postgres  2530  2524  0 17:26 ?        00:00:00 postgres: stats collector process

关闭:

[postgres@localhost ~]$ pg_ctl stop -D $PGDATA

waiting for server to shut down.... done

server stopped

[postgres@localhost ~]$ pg_ctl status

pg_ctl: no server running

第七步:登录数据库

以postgres身份来启动数据库(前面已通过su - postgres切换):

[postgres@localhost ~]$ pg_ctl start -D $PGDATA -l pgsql.log

列出所有可用的数据库:

[postgres@localhost ~]$ psql -l

该命令执行后,然后退出。

登录数据库:

使用"psql 数据库名"登录数据库。缺省数据库名时,连接到默认的数据库postgres。

[postgres@localhost ~]$ psql

psql (9.3.2)

Type "help" for help.

postgres=# select version();

                                                   version

--------------------------------------------------------------------------------

------------------------------

 PostgreSQL 9.3.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120

313 (Red Hat 4.4.7-4), 64-bit

(1 row)

使用PostgreSQL数据库命令行交互工具psql登录数据库后,可以执行SQL命令或者psql提供的元命令。使用\?可以查看psql的所有元命令和功能说明。

登录数据库后,命令行提示符为"数据库名=#",如:"postgres=#"。

登录后,psql常用的元命令:

\?, 查看psql所有可以使用的元命令和说明信息;

\l,列出所有的数据库信息;

\c demodb, 连接到demodb数据库;

\c[onnect] [数据库名称|- 用户名称|- 主机|- 端口|-], 连接到新的数据库;

\d, 列出表,视图和序列;

\d 名称, 描述表,视图,序列,或索引;

\db [模式], 列出表空间

\di [模式], 列出所有索引;

\dt [模式], 列出所有表;

\dT [模式], 列出数据类型

\h, 列出所有的SQL命令;

\h select, 列出select语句的语法;

\i file, 执行来自file的命令;

\q, 退出psql;

select * from pg_stat_activity; 显示当前活动任务列表.

第八步:简单的操作

新建数据库,连接数据库,执行增删改查的操作,删除数据库

接着第七步,先\q退出psql:

postgres=# \q

接着执行如下操作:
新建数据库:

[postgres@localhost ~]$ createdb test

查看所有数据库:

[postgres@localhost ~]$ psql -l
连接到test数据库:

[postgres@localhost ~]$ psql test

psql (9.3.2)

Type "help" for help.

test=#
创建数据表:

test=# create table person(id int, name varchar(10), sex char(1), birth date);

CREATE TABLE

test=# create table demo(id int);

CREATE TABLE
列出表,视图和序列:

test=# \d

 public | demo   | table | postgres

 public | person   | table | postgres
查看表结构:

test=# \d person

 id     | integer               |

 name   | character varying(10) |

 sex    | character(1)          |

 birth  | date                  |

插入数据:

test=# insert into person(id,name,sex,birth) values(1,'zhangsan','1','1990-01-08');

INSERT 0 1
查询表中的数据:

test=# select * from person;

 id |   name   | sex |   birth

----+----------+-----+------------

  1 | zhangsan | 1   | 1990-01-08

(1 row)

更新数据:

test=# update person set name='lisi' where id=1;

UPDATE 1

删除数据:

test=# delete from person where id = 1;

DELETE 1

新增字段:

alter table person add column address varchar(50);

ALTER TABLE

test=# \d person
修改字段类型:

alter table person alter column address type varchar(20);

ALTER TABLE

test=# \d person
修改字段名:

alter table person rename column id to no;
修改表名:

alter table person rename to person_demo;
删除字段:

alter table person drop column address;

ALTER TABLE

test=# \d person

新增主键:

test=# alter table person add primary key(id);

ALTER TABLE

test=# \d person

增加约束:

唯一约束:

test=# alter table person add constraint unique_name unique(name);

ALTER TABLE

test=# \d person

删除约束:

test=# alter table person drop constraint unique_name;

test=# \d person

test=# alter table person drop constraint person_pkey;

test=# \d person

查看建表语句:

删除表:

test=# drop table person;

test=# \d

删除数据库:

先退出psql,后删除数据库:

test=# \q

[postgres@localhost ~]$ dropdb test;

其实,可以在psql中直接通过sql命令创建和删除数据库:

[postgres@localhost ~]$ psql

postgres=# \l
postgres=# create database test;

CREATE DATABASE

postgres=# \l

postgres=# \c test;

test=# create table t(id int);

CREATE TABLE

test=# \d

test=# \c postgres
postgres=# drop database test;

DROP DATABASE

postgres=# \l
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: