PG学习初体验--源码安装和简单命令(r8笔记第97天)
其实对于PG,自己总是听圈内人说和Oracle很相似,自己也有一些蠢蠢欲动学习的想法,从我的感觉来看,它是介于Oracle和MySQL之间的一种 数据库,具备类似Oracle的功能,兼具MySQL的开源风格。所以个人感觉无论是从Oracle转向学习PG,还是从MySQL转向PG都会有一些独 到的侧重方向。当然学习数据库本身不是目的,会的越多并不能说明你很牛,能够深入理解数据库,就如同感受的性格和处事风格,在合适的场景使用它,无想应该 是超越于技术本身之外,而且难能可贵的。
其实我本身也是一个浮躁的人,不喜欢全表扫描式的学习,很多东西都不喜欢按照那种系统的方式来学习,很多东西都想先问问,或者走捷径最好。如果一个坎绕过 去了,我喜欢再绕回去反复走走。所以在快下班的时候,专门抽了不到一个小时的时间,在同事的帮助下完成了PG的安装。
当然本来是想简单安装一下PG,简单了解一下,结果最后竟然尝试成功了源码安装。
如果网络允许,完全可以使用wget来下载,或者到官网离线下载。
#wget https://ftp.postgresql.org/pub/source/v9.5.2/postgresql-9.5.2.tar.gz
。。。
HTTP request sent, awaiting response... 200 OK
Length: 24100449 (23M) [application/x-gzip]
Saving to: `postgresql-9.5.2.tar.gz'
100%[========================>] 24,100,449 4.82M/s in 7.0s
2016-05-12 17:30:52 (3.26 MB/s) - `postgresql-9.5.2.tar.gz' saved [24100449/24100449]
得到了源码包之后,使用tar -zxvf的方式解压即可。
至于源码安装,真心比自己想象要简单很多,不过也遇到了一些小问题。
源码安装的步骤就是./configure ; gmake ; gmake install三步
在第一步的时候发现有这么个错误。
checking for library containing sched_yield... none required
checking for library containing gethostbyname_r... none required
checking for library containing shmget... none required
checking for library containing readline... no
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.
看起来是readline的包缺少,但是查看rpm包是有的。
#rpm -qa|grep readli
readline-5.1-3.el5
readline-5.1-3.el5
还 有一个是zlib包的同样警告,最后勉强使用./configure --without-readline --without-zlib的方式编译,终于成功了。当然这种方式会无法启用一些特性,readline我是知道的,应该是在命令中上下翻页的功能会失 效。但是暂时不影响核心功能。
gmake; gmake install的步骤很快就完成了,最后以一句“PostgreSQL installation complete.”结束。
接下来就是创建用户,默认还是创建postgres的用户,要不可能要改动一些配置文件。
useradd postgres
然后把/usr/local/psql/bin放入环境变量中。
$which initdb
/usr/local/pgsql/bin/initdb
使用下面的方式来初始化,这个过程就如同MySQL的installdb一般。
$initdb -D /home/postgres/data --locale=C --encoding=UTF8
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
然后使用下面的方式来启动PG,当然可以配置到service中,可以使用pg_ctl来启动,方法确实比较多。
$postgres -D /home/postgres/data >/home/postgres/log/pg.log &2>1
完成之后就可以顺利进入PG的命令行界面了。
当然readline的功能确实是无法启用,我们回过头来看看到底是怎么回事。经过简单的排查,认为是缺少了readline-devel的包,使用yum来安装后。我们来清空编译,重新编译一次。
make clean
./configure
gmake
gmake install
当然这一次就非常顺利了,很快就进入了PG命令行界面。
我们来简单看看PG的进程,可以看到它也是有着多进程的方式,里面尤其是write process,checkpointer process和Oracle中应该是类似的功能。
[postgres@iZu127ehmv7Z ~]$ps -ef|grep post
root 12928 24641 0 18:07 pts/0 00:00:00 su - postgres
postgres 12929 12928 0 18:07 pts/0 00:00:00 -bash
postgres 12953 12929 0 18:07 pts/0 00:00:00 postgres -D /home/postgres/data
postgres 12955 12953 0 18:07 ? 00:00:00 postgres: checkpointer process
postgres 12956 12953 0 18:07 ? 00:00:00 postgres: writer process
postgres 12957 12953 0 18:07 ? 00:00:00 postgres: wal writer process
postgres 12958 12953 0 18:07 ? 00:00:00 postgres: autovacuum launcher process
postgres 12959 12953 0 18:07 ? 00:00:00 postgres: stats collector process
postgres 13020 12929 0 18:36 pts/0 00:00:00 ps -ef
postgres 13021 12929 0 18:36 pts/0 00:00:00 grep post
我们来简单用几个命令玩玩。
查看PG的版本
postgres=# SELECT version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 9.5.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54), 64-bit
(1 row)
查看连接信息。
postgres=# conninfo
You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5432".
查看数据字典,看看有哪些数据库。
postgres=# select datname from pg_database;
datname
-----------
template1
template0
postgres
test
(4 rows)
想看看使用的用户
postgres=# du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
看看当前时间,这些和MySQL是一样的。
postgres=# select now();
now
-------------------------------
2016-05-12 19:44:35.337461+08
(1 row)
看看有哪些schemas
postgres=# dn
List of schemas
Name | Owner
--------+----------
public | postgres
(1 row)
创建一个数据库test,方式和MySQL一样。
create database test;
查看数据库的大小,可以发现是大小写敏感的。
STATEMENT: SELECT pg_size_pretty(pg_database_size('TEST')) As fulldbsize;
ERROR: database "TEST" does not exist
postgres=# SELECT pg_size_pretty(pg_database_size('test')) As fulldbsize;
fulldbsize
------------
7224 kB
(1 row)
如果要连入test数据库
postgres=# c test
You are now connected to database "test" as user "postgres".
test=#
查看存在的数据库
test=# l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
test | postgres | UTF8 | C | C |
(4 rows)
查看数据字典的信息
postgres=# dS+
List of relations
Schema | Name | Type | Owner | Size | Description
------------+---------------------------------+-------+----------+------------+-------------
pg_catalog | pg_aggregate | table | postgres | 48 kB |
pg_catalog | pg_am | table | postgres | 40 kB |
pg_catalog | pg_amop | table | postgres | 80 kB |
pg_catalog | pg_amproc | table | postgres | 64 kB |
pg_catalog | pg_attrdef | table | postgres | 8192 bytes |
pg_catalog | pg_attribute | table | postgres | 392 kB |
pg_catalog | pg_auth_members | table | postgres | 0 bytes |
pg_catalog | pg_authid | table | postgres | 40 kB |
比如我们来看看pg_settings的字段情况,尝试使用desc
postgres=# desc pg_settings
postgres-#
竟然没有任何反应,原来是用d的方式
postgres=# d pg_settings
View "pg_catalog.pg_settings"
Column | Type | Modifiers
-----------------+---------+-----------
name | text |
setting | text |
unit | text |
category | text |
。。。
查看最近执行的命令
s
忍不住创建一个表试试
test=# create table test_tab(id int);
CREATE TABLE
从数据字典里查看表的信息
test=# select table_catalog,table_schema,table_name,table_type from information_schema.tables;
table_catalog | table_schema | table_name | table_type
---------------+--------------------+---------------------------------------+------------
test | public | test_tab | BASE TABLE
test | pg_catalog | pg_statistic | BASE TABLE
test | pg_catalog | pg_type | BASE TABLE
test | pg_catalog | pg_authid | BASE TABLE
test | pg_catalog | pg_roles | VIEW
test | pg_catalog | pg_shadow | VIEW
查看表中字段的情况
test=# SELECT column_name FROM information_schema.columns WHERE table_name ='test_tab';
column_name
-------------
id
(1 row)
查看数据库test中的表
test=# dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | test_tab | table | postgres
(1 row)
- 单拼域名can.com以高达99.2万元成交!
- CI学习 CCNET Config 第一天
- IBatisNet基础组件
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- 在Windows 8 Hyper-V下的安装CentOS 6和SSH配置
- WordPress RSS Feed 优化/设置技巧六则
- SourceTree 基本介绍
- 学习Altas 笔记[JS简单调用服务端方法]
- 使用WinSCP软件在windows和Linux中进行文件传输
- 线程安全的Generic Dictionary
- Python 项目实践三(Web应用程序)第五篇
- CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4
- Python 项目实践三(Web应用程序)第四篇
- 负载均衡环境下缓存处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php实例化一个类的具体方法
- PHP MVC框架中类的自动加载机制实例分析
- smarty模板的使用方法实例分析
- 关于Yii中模型场景的一些简单介绍
- php文件包含的几种方式总结
- 一个基于Laravel5的个人博客系统:Lablog搭建教程
- php快速导入大量数据的实例方法
- Laravel 模型关联基础教程详解
- yunBT:一个基于TP3.1的多用户BT离线下载程序,支持在线播放
- 使用Chihaya搭建一个可以屏蔽迅雷的Tracker
- [jio本]Debian9一键安装各种下载工具
- php实现QQ小程序发送模板消息功能
- 微软自家沙盒 Sandbox公布
- php DES加密算法实例分析
- php提供实现反射的方法和实例代码