专栏首页杨建荣的学习笔记PG学习初体验--源码安装和简单命令(r8笔记第97天)

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)

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:杨建荣

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PostgreSQL里面的一些命令小结

    近两天总结了下PostgreSQL的基本操作命令,对PostgreSQL也有了一个基本的认识。 PostgreSQL的功能还是很丰富的,有序列,支持db lin...

    jeanron100
  • MySQL中的Online DDL(第一篇)(r11笔记第3天)

    记得有一天快下班的时候,一位开发同事找到我说,需要对一个表做变更,数据量据说有上千万,而当时是使用的MySQL版本是5.5,这可如何是好,对于在线业务要求高的情...

    jeanron100
  • MySQL特有的SQL语句 第一弹

    关于SQL,我们总是会有无穷无尽相关的话题,有时候碰到了一些觉得不错的SQL功能会标记下来,好记性不烂烂笔头,回头来看,自己也收集了不少的点子,但是从整体来...

    jeanron100
  • 程序员的Mac入门-安装配置PostgreSQL和简单使用

    先来说一下安装,可以在官网上下载安装包或者使用官网提供的 Postgres.app,这里就不详细介绍了

    沈唁
  • 中石化炼化工程集团股份有限公司与ENSTOA联合铸造世界级品牌

    2018年8月21日,作为业内唯一一家专注于大型复杂工程项目进行提升改造的全球性专业服务公司,Enstoa(因思多)今日在北京宣布与中石化炼化工程(集团)股份有...

    一线新闻
  • VMware下Windows2003R2虚拟机磁盘扩容方法

            有时候因为前期规划的原因造成磁盘空间不足,这时候我们需要对虚拟磁盘进行扩容,在Windows2008及以上版本,这是一件很简单的事情,但对于Wi...

    木子-Lee
  • ABP入门系列(20)——使用后台作业和工作者

    源码路径:Github-LearningMpaAbp 1.引言 说到后台作业,你可能条件反射的想到BackgroundWorker,但后台作业并非是后台任务,...

    圣杰
  • 【学术】你真的知道什么是随机森林吗?本文是关于随机森林的直观解读

    对于那些认为随机森林是一种黑箱算法的人来说,这篇文章可以提供不同的观点。我将介绍4种解释方法,这些方法可以帮助我们从随机森林模型中得到一些直观的解释。我还将简要...

    AiTechYun
  • Error response from daemon: rpc error: code = Unknown desc = name conflicts with

    docker service create --mode global --name logspout gliderlabs/logspout

    周小董
  • Confluence 6 嵌入的 H2 数据库

    为了让你的 Confluence 在安装成功后就可以使用而不需要使用任何外部的数据库,Confluence 使用一个嵌入的 H2 数据库。

    HoneyMoose

扫码关注云+社区

领取腾讯云代金券