PG学习初体验--源码安装和简单命令

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:    其实对于PG,自己总是听圈内人说和Oracle很相似,自己也有一些蠢蠢欲动学习的想法,从我的感觉来看,它是介于Oracle和MySQL之间的一种数据库,具备类似Oracle的功能,兼具MySQL的开源风格。
   其实对于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)






相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
8月前
|
物联网 虚拟化 Windows
Windows 10 version 22H2 中文版、英文版下载 (2025 年 3 月更新)
Windows 10 version 22H2 中文版、英文版下载 (2025 年 3 月更新)
404 4
|
9月前
|
UED
产品经理-用户体验五要素 - AxureMost
《用户体验五要素》介绍了构建成功用户体验设计的五个层面:战略层、范围层、结构层、框架层和表现层。战略层明确产品目标与用户需求;范围层定义功能和内容需求;结构层规划交互与信息架构;框架层设计界面、导航和信息布局;表现层则通过视觉设计创造感知体验。每一层都依赖于其下一层,形成自下而上的连锁效应,确保各要素相互作用,共同实现用户体验目标。
|
Web App开发 数据采集 Java
【Python】已完美解决:selenium.common.exceptions.SessionNotCreatedException: Message: session not created
【Python】已完美解决:selenium.common.exceptions.SessionNotCreatedException: Message: session not created
1515 0
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
772 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
人工智能 关系型数据库 分布式数据库
沉浸式学习PostgreSQL|PolarDB 17: 向量数据库, 通义大模型AI的外脑
本文所涉及的实验体验的就是怎么建设AI的外脑?向量数据库的核心价值:AI外脑
1752 4
|
存储 Oracle 关系型数据库
【数据库-Oracle】《Oracle 数据库探秘:基础知识点全攻略》
《Oracle 数据库探秘:基础知识点全攻略》深入介绍 Oracle 数据库的基础知识点,包括数据类型、表结构、查询语句等。通过详细讲解、代码示例和流程图,帮助读者快速掌握 Oracle 数据库的基本操作,为数据库开发和管理打下坚实基础。
257 0
|
Linux Swift iOS开发
LLDB:强大的源代码级调试工具
LLDB:强大的源代码级调试工具
963 0
|
存储 缓存 算法
InfluxDB高级特性:数据压缩与存储优化技术详解
【4月更文挑战第30天】InfluxDB,流行的开源时序数据库,采用LSM Tree存储引擎,利用WAL和TSM文件高效存储数据。其高级特性包括数据压缩(Snappy、Gorilla、Delta编码)和存储优化(时间序列分区、数据块合并、删除与归档)。通过选择合适的压缩算法、设置分区策略、定期合并数据块及制定保留策略,可优化InfluxDB性能和存储效率。
2056 0
|
SQL Oracle 关系型数据库
零基础入门 Oracle数据库:轻松上手
零基础入门 Oracle数据库:轻松上手
376 0
|
SQL JavaScript 前端开发
开源!!!自习室在线选座系统!!!
开源!!!自习室在线选座系统!!!
289 0