环境:openSUSELeap42.2自从Ubuntu放弃Unity转投Gnome后,我也放弃了Ubuntu转投openSUSE。Leap的软件版本有点旧(比如Vim还是7.4),但好处是稳定、优雅、省心。距离Tumbleweed的滚动发布版本还有一步之遥。试用后感觉不够稳定,不适合日常使用。openSUSE的KDE桌面是必须的。我工作用Windows,娱乐用Mac,写代码用Linux。我认为openSUSE的KDE是最好的桌面。还在使用Ubuntu的同学,可以参考阮一峰写的PostgreSQL入门。安装安装客户端:$sudozypperinpostgresql安装服务器:$sudozypperinpostgresql-server交互式客户端程序是psql,服务器程序是postgres。安装完成后,linux多了一个用户postgres,但是这个用户没有设置密码。现在为它设置一个密码:$sudopasswdpostgres<提示输入新密码>接下来,切换到用户postgres,然后创建一个数据库集群(Cluster)。(adam@linux)$supostgres<输入刚刚设置的密码>(postgres@linux)$initdb-D/var/lib/pgsql/datadatabasecluster是数据库的位置,和/var/lib/pgsql/data是推荐的位置之一。启动服务首先要切换到postgres用户:(adam@linux)$supostgres通过pg_ctl工具启动服务:(postgres@linux)$pg_ctlstart-D/var/lib/pgsql/data启动serverprocess2017-06-2510:11:14CSTlog:日志输出重定向到logcollectionprocess2017-06-2510:11:14CST注意:后续的日志输出会出现在目录"pg_log"pg_ctl是一个工具用于初始化、启动、停止或控制PostgreSQL服务器的工具。查看进程状态:$psaux|greppostgrespostgres57650.00.221316020404pts/0S10:110:00/usr/lib/postgresql94/bin/postgres-D/var/lib/pgsql/datapostgres57680.00.0683083112?Ss10:110:00postgres:记录器processpostgres57700.00.02131603628?Ss10:110:00postgres:检查点进程postgres57710.00.02131605684?Ss10:110:00postgres:作者processpostgres57720.00.02131603628?Ss10:110:00postgres:walwriterprocesspostgres57730.00.02135606800?Ss10:110:00postgres:autovacuumlauncherprocesspostgres57740.00.0683044216?ss10:110:00postgres:statscollector进程通过pg_ctl查看状态:(postgres@linux)$pg_ctlstatus-D/var/lib/pgsql/datapg_ctl:runningserverprocess(PID:5765)/usr/lib/postgresql94/bin/postgres"-D""/var/lib/pgsql/data"注意非postgres用户还是没有权限查看状态:(adam@linux)$pg_ctlstatus-D/var/lib/pgsql/datapg_ctl:Unabletoaccessthedirectory"/var/lib/pgsql/data":Insufficientpermissions为了避免每次都用-D选项指定数据库集群的目录,添加环境变量PGDATA打开.bashrc,和添加如下两行:#PostgreSQLdatabaseclusterdirectory.exportPGDATA=/var/lib/pgsql/data下次使用pg_ctl时不需要指定-D。(postgres@linux)$pg_ctlstatuspg_ctl:runningserverprocess(PID:5765)/usr/lib/postgresql94/bin/postgres"-D""/var/lib/pgsql/data"角色(Role)回到Linux普通用户(如adam),试图与客户端程序psql交互:(adam@linux)$psqltemplate1psql:Fatalerror:role"adam"doesnotexist提示角色不存在。角色是一个PostgreSQL概念,用于管理对数据库的访问。切换回postgres用户,列出所有角色。(postgres@linux)$psqltemplate1psql(9.4.9)输入“help”获取帮助信息。template1=#SELECTrolnameFROMpg_roles;rolname------------postgres(1行记录)可以可见postgres只有一个角色。创建一个新角色adam:template1=#CREATEROLEadam;CREATEROLEtemplate1=#SELECTrolnameFROMpg_roles;rolname------------postgresadam(2行记录)再次尝试以用户adam连接:(adam@linux)$psqltemplate1psql:Fatalerror:Loginnotpermittedforrole"adam"看来刚刚创建的角色adam没有数据库的登录权限。重新创建角色:template1=#DROPROLEadam;DROPROLEtemplate1=#CREATEROLEadamWITHLOGINCREATEDBPASSWORD'654321';然后,您可以使用adam角色登录。(adam@linux)$psql-l数据库列表名称|拥有者|字符编码|校对规则|类型|访问权限------------+---------+---------+------------+--------------+--------------------------postgres|邮政编码|编码器|zh_CN.UTF-8|zh_CN.UTF-8|模板0|邮政编码|编码器|zh_CN.UTF-8|=c/postgres+|||||postgres=CTc/postgrestemplate1|邮政编码|编码器|zh_CN.UTF-8|zh_CN.UTF-8|=c/postgres+|||||postgres=CTc/postgres(3行记录)psql通过-U指定角色,之前没有指定。默认角色是Linux用户名,所以实际上可以指定角色:(adam@linux)$psql-l-Uadam注意,数据库角色名不必与Linux用户名相同。通过-U选项,可以使用任意角色登录数据库:(adam@linux)$psql-l-Upostgrescreatedatabase(adam@linux)$createdbmydb(adam@linux)$psql-lname|拥有者|字符编码|校对规则|类型|访问权限------------+---------+---------+-------------+--------------+------------------------mydb|亚当|编码器|zh_CN.UTF-8|zh_CN.UTF-8|...删除数据库:(adam@linux)$dropdbmydb使用数据库:(adam@linux)$psqlmydb当然,psql只是其中一种使用数据的方式。
