如何使用 pgAdmin 查看 Rails 开发环境的 PostgreSQL 数据(附解题过程、思路、总结)

2016-10-12 10:29:22来源:作者:全栈工程师成长记人点击

第七城市
背景

在 Rails 项目的开发中,通常在本地开发环境使用 SQlite3 做为数据库,在正式环境中则使用 PostgreSQL ( gem 'pg')。

在开发的过程中,如果想要查看 SQlite3 的数据,可以使用 DB Browser for SQLite。

那么问题来了,如果在开发环境中使用 PostgreSQL 做为数据库,当你想要查看数据的时候,该使用什么可视化工具呢?pgAdmin 是一个不错的选择。

使用步骤

pgAdmin是一个针对 PostgreSQL(世界上非常先进的开放源码数据库)的非常流行并且具有丰富特性的开放源码管理和开发工具,pgAdmin 被设计来应对所有用户的需求,从写一个简单的 SQL 语句查询到开发一个复杂的数据库系统,图形化界面可以支持所有 PostgreSQL 特性并且易于管理。

step1.下载 pgAdmin 并安装;

step2.运行 pgAdmin ,点击 Add New Server;

step3.弹出的窗口里默认显示的是 General标签页,在 Name里面填写一个好记的名称;

step4.切换到 Connection标签页,在 Host name/address里面填写 localhost。Port 和 Maintenance database 栏位用默认的数据就好了,不要动;

step5.重点来了, User name这个栏位默认填的是 postgres,而 postgres 这个用户并不是超级用户,所以后续的过程里要查看数据或者使用一些指令的时候,会提示权限不足(大多数时候需要超级管理员,不然真的很不方便)。这里真正要填的用户是超级用户,而名字就是你 Mac 电脑的 登录用户名,如果不确定,打开 系统偏好设置 > 用户与群组 > 当前用户就能看到了。输入用户名之后点击 Save 保存;

step6.在 pgAdmin 左侧导航蓝点击 + 号展开 Servers ,继续展开你刚才创建的 Servers Name > Databases > your_rails_app_name_development > Schemas > public > Tables,在某个你已经创建过数据的 table (比如 users 这个 table )的名称上点击右键,选择 View Data > View First 100 Rows,不出意外的话,你就能在右下方的窗口看到有很多数据列了出来。恭喜你,你已经以超级管理员的身份连上你的数据库了。温馨提示,操作数据需谨慎,即便是开发环境~

补充如果你不确定哪个用户是超级用户,在 step5 可以先用 pgAdmin 默认填写的用户名称。然后在 step6 展开 Servers Name > login/Group Roles,接着在你看到所列的每一个用户名称上点右键然后点击 Properties,在弹出的窗口里点击 Pivileges标签页,接着看 Superuser这个栏位的状态是不是 Yes,如果是 Yes 则表示该用户是超级管理员。如果是 No ,你无法直接将他改为 Yes 然后保存,因为还是会提示你权限不足。所以你就继续看下一个用户,直到看到为止,然后重复 step1 ,到 step5 的时候填入正确的用户名即可。

那坎坷的解题过程啊

找到 pgAdmin 并现实自己之前想要的效果,着实是一波三折。

Part1.

昨天晚上基于前文提到的背景想到要查看 pg 数据库,于是 google “查看 pg 数据”(先无视英文水平……), 第一个搜索结果不合适,直接跳到第五个搜索结果 《PostgreSQL新手入门》,在第一步里,因为之前已经安装过 PostgreSQL 客户端和服务器,可以忽略,有帮助的点全在下面这句话里:

如果还想安装图形管理界面,可以运行下面命令,但是本文不涉及这方面内容。

sudo apt-get install pgadmin3

pgadmin3 是什么?再去 google ,最后在官网下载了 pgadmin4。

安装了 pgadmin4 然后运行起来,可对着这界面就开始有点懵了,毕竟用 SQLiteBrowser 可太简单了,直接点击 Open Database 就能打开 Rails 项目里的 SQlite 数据库了。

这个 pgadmin4 啊,却要 Add Server ,还要填 Host name,这都什么鬼啊,我在想自己的打开方式是不是出了什么差错?不管了,先睡觉,第二天再说。

Part2.

上午想起昨天 pg 的事情还没解决,于是到微信上面问学霸同学知不知道有什么工具,他的回答是:

mysql 是有的, pg 不知道有没有,你可以去看看 navicat 支持不。

又来新思路,赶紧 google navicat,在 Navicat 官网发现有支持 PostgreSQL 的版本,中文标准版价格 1299 ,先不管,有试用版,试用好了再说。

把 Navicat 装起来之后运行,界面主按钮的第一个是“连接”,对比昨天的 pgAdmin 来看,应该有找到一点套路了:要打开 PostgresSQL 数据库都要采用连接的方式,想起之前配置环境安装 PostgresSQL 之后要执行 brew services start postgresql启动 pg 服务。

可以类比为我们要访问网站,就要运行网站服务器,然后在浏览器的地址栏里输入网址来访问网站。而 Navicat 、pgAdmin 之类的可视化工具则是 PostgresSQL 的“浏览器”。

Navicat 的一个比较人性化的地方是自动填好地址( localhost)、端口、用户名了,我们只要给这个连接起个喜欢的名称就可以了。地址这个步骤着实是个巨坑,昨天用 pgAdmin 就不知道应该填什么……

虽然通过 Navicat 连接到了数据库,可是那些表格还是打不开,双击的时候会提示 “permission denied for relation xxx”。 但这时候的关注点竟然不在错误提示及其解决方式,而是一心想着要看到数据。事后回想实在不应该。

Part3.

下午6点趁着把其他主要工作完成之后,找来 YY 老师帮忙。

1.我的表述是想要查看 pg 数据里每个表格的具体数据。

google pg database table view,第一条结果来自 StackOverflow,相关的回答是在 PostgresSQL 的命令行里使用 /dt,这个命令只能查看数据库里有哪些表格,跟预期不符。

2.既然是要可视化,可视化的英文是 Visualization ,所以 google pg database Visualization,第一结果仍然来自 StackOverflow ,答案是使用 DbVisualiser这个软件,依旧是收费软件,单用户 179 美刀,换算下来跟 Navicat 的价格差不多,一样不管,毕竟有试用,先用好再说。

下载安装 DbVis ,运行的时候提示没有 Java 环境,还好网速够快,又重新下载带 Java 版本的。再次运行起来的时候,轻车熟路的填了 localhost创建新连接,不过 table 依旧无法打开。

3.我们的目光还是聚焦在 无法看到 table 里的内容,这时 YY 老师想到查看 SQlite3 的数据的那个软件叫做 sqlitebrowser ,看来 browser 也是个关键字。google sqlbrowser pq无果,换个关键词

postgresql browser,第三条结果是“pgAdmin III:PostgreSQL管理工具”,连接指向 pgAdmin 的官网。我告诉他昨天已经装了 pgAdimn4 ,看来我们要重拾这个软件了。

4.再次打开 pgAdimn ,把该点的 + 号都点开了,不过并没有预期的结果。这时我们注意到 pgAdimn 的官网上有 几张截图,所以就先照着截图依样画葫芦看看能不能输出一样的结果。 这一张图片给我们带来了启发,原来是要创建一个 Query 去调取数据啊,模仿着打了一个用户查询语句:

SELECT * FROM pem.usersORDER BY idASC

提示 ERROR: relation "pem.users" does not exist,多番反复尝试之后使用

SELECT * FROM public.usersORDER BY idASC

结果提示 ERROR: permission denied for relation courses,说明语法有用对了,但是权限不够,这跟 part2 使用 Navicat 双击表格出现的提示是一样的。

5.这时已经开始有了一些的解题思路,先跳过权限提示,接着先看 pgAdmin 官网的 下一张截图,这里有个语句是

SELECT * FROM pg_tables;

试了一下,竟然可以真的可以列出所有的 table ,看来确实可以用一些语法查询了。不过还是想着在解决权限问题的同时要不要找另外一款软件试试。

6.搜到了 Datazenit这个软件,又是下载安装,再次提示没有 Java 运行环境,按照软件指示到 Java 官网 下载安装,接着运行 Datazenit 还是提示没有 Java 环境,于是又去 Java 官网 验证安装情况,提示 Chrome 浏览器不支持 NPAPI 插件,要使用 Firefox 、或者 Safari ,用 Firefox 验证提示 “无法验证当前是否已安装并在浏览器中启用 Java。” ,又换了 safari ,终于提示“您已安装了推荐的 Java 版本”,于是判断 Java 没有问题,果断放弃使用 Datazenit 。

7.回到 pgAdmin ,重拾权限问题,google ERROR: permission denied for relation, 第一结果不出所料依然出自 StackOverflow :

Here is the complete solution for PostgreSQL 9+, updated recently

``` ruby

CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';

GRANT USAGE ON SCHEMA public to readonly;

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;

-- repeat code below for each database:

GRANT CONNECT ON DATABASE foo to readonly;

/c foo

GRANT USAGE ON SCHEMA public to readonly;

GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;

GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

```

问题是,这么多的命令,在哪里输入?试着在刚在 Query 界面输入

第一行 CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';,依旧提示权限不足。

8.看来是跟 pg 的命令行有关,于是 google pq command line,无果;换关键词 PostgreSQL command line, 第三个结果的标题是 《Postgres login - how to log into a Postgresql database》,这应该是关键点,文章里的第一条登陆命令是

psql -d mydb -U myuser,照着命令将用户换成 postgre(因为之前所有软件登陆都是用这个用户名)。果然能够进入到 psql 的命令行里面了,再次运行 CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';,依旧提示权限不足。

另一手准备也在同步进行,先查一下 pgAdmin 的用法,google pgadmin 教程,第一个结果是一个 百度文库,看一下又不会怀孕,点进去呗,虽然文库截图的界面是中文,而下载的却是英文版,但对照一下还是可以。

其中有一个截图是在 table 名称上面点右键,选择 查看数据 > 查看所有行 ,原来还有这个玩法,不用手动输入 Query 命令。赶紧回到软件里去试,悲剧的是再次提示权限不足。

怎么办?陷入死循环了?低权限的用户无法创建更高权限的用户,那更高权限的用户在哪里呢?

9.再仔细一下那几个软件吧,这一看不要紧,在 Navicat 的主要按钮里看到“角色”这么一个按钮,点击进去,发现有列出几个用户,点击 postgres 这个用户,在超级用户这个栏位显示的是 No ,怪不得,原来这个用户不是超级用户啊。再点其他列出的用户,有一个名为 nfreeness 的用户竟然是 超级用户,这里猜测它可能是系统自动按电脑登陆的用户名称确定的。先不管,回到 psql 命令行,退出 postgres 用户登陆再换 nfreenes 用户登陆就好了,不过怎么退出 psql 命令行呢,按直觉 exit 退不出,登陆时提示 Type "help" for help.,输入 help 就能看到退出的命令是 /q。退出之后重新以超级用户的身份连接到了数据库,再次运行 CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';,终于提示创建成功。

10.不过这时我们猛然想到,既然已经有一个超级用户了,干嘛还要再创建一个新的用户,直接在创建连接时候使用超级用户不就可以了嘛……所以回到 pgAdmin 创建一个新连接并以超级用户登陆,再去查看表格所有行,终于能通过了!!

总结与收获

1.对新软件多一些耐心

新装一个软件,很多界面和操作可能是陌生的,这时如果过快的“感觉”它不达到你的要求进而直接放弃可能不是最好的选择,应该看一下它的报错页面,看一下它的运行逻辑,再分析一下自己没有错误的理解或者操作不当的地方。

2.解决问题的过程有很多可能性

google关键词不一定非得用英文(虽然整体上英文资源更多),有时穿插着使用中文也是必要的,毕竟解决问题才是最关键的。

3.加入新视角

单独一个人解决问题的时候,可能会出现视野局限,加入他人的力量,共同激发解决问题的灵感是很有用的,当然前提是要大家都真的投入这个过程。

4.记录没那么简单

昨晚安装 pgAdmin 和今天安装 Navicat 用时加起来不超过 30 分钟(因为我都是在“第一时间”“发现”它不能达到要求而没有耐心再用下去了)。今天下午真正解决问题的过程是 1 个小时,也就是解决这个问题前后花了 1 个半小时,但是写这篇纪录的文章却花了 4 个小时来回顾过程、添加链接、组织文字。

5.但记录还是有必要的

记录的过程是一个重复的过程,在重复之中还带着反思,再到最后的发布文章,都是加深印象的方式。

6.I'll be back

解决的一个小问题,难道以后就高枕无忧了吗?当然不是,问题总会发生,每一次问题被解决掉之后,它似乎都在放下狠话“I'll be back”,不过这没什么好怕的,让我们跟 google 愉快的挥挥小手 “I'll be back” 。

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台