博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
postgresql 安装使用
阅读量:583 次
发布时间:2019-03-11

本文共 8679 字,大约阅读时间需要 28 分钟。

PostgreSQL 中文社区在线文档:        

PostgreSQL 英文官网:

知乎 - PostgreSQL 与 MySQL 相比,优势何在?:

阿里云大学 -

易百 - PostgreSQL教程:

PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES 版本 4.2 为基础的对象关系型数据库管理系统(ORDBMS),简称 pgsql,PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC(多版本并发控制)同样,PostgreSQL 可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引、方法、过程语言,并且因为许可证的灵活,任何人都可以以任何目的免费使用,修改,和分发 PostgreSQL, 不管是私用,商用,还是学术研究使用。

1. 安装

首先,安装PostgreSQL客户端。

sudo apt-get install postgresql-client
然后,安装PostgreSQL服务器。
第一步:安装运行命令:sudo apt-get install postgresql -y第二步:安全设置安装 postgresql 之后系统会自动创建一个空密码的 Linux 的用户 postgres,现在为 postgres 用户添加密码(cat /etc/passwd | grep post  )sudo passwd postgres第三步:连接数据库systemctl start postgresql  // 启动 postgresql 服务su - postgresqlc            // 切换到 postgresql 用户psql postgres               第四步:查看帮助postgres=# help

如果在 root 用户下执行 psql 时,会报错。报错如下:可以看到我 Linux 中的 root 用户和 king 用户 在 psql 中角色都不存在

在PostgreSQL 里没有区分用户和角色的概念,"CREATE USER" 为 "CREATE ROLE" 的别名,这两个命令几乎是完全相同的,唯一的区别是"CREATE USER" 命令创建的用户默认带有LOGIN属性,而"CREATE ROLE" 命令创建的用户默认不带LOGIN属性(CREATE USER is equivalent to CREATE ROLE except that CREATE USER assumes LOGIN by default, while CREATE ROLE does not)。现在在 postgresql 中创建一个名为 root的角色(Postgresql 的超级用户是 postgres):

( ******* 注意:语句后面的分号  ; 不能省略 ********** )

在postgresql中创建一个名为root的角色即可(切换到 postgres 用户):postgres@debian:~$ createuser root postgres@debian:~$ psqlpsql (9.3.3)Type "help" for help.postgres=# \du

创建角色 king 并赋予其CREATEDB 的权限。 postgres=# CREATE ROLE king CREATEDB ; postgres=# \du 创建角色并赋予多个属性时属性之间要用空格:postgres=# create role king CREATEDB  superuser Createrole Replication login;    postgres=# \du  //要添加的属性一般要包括如下。直接将postgres所有权限都给root后,仍报错google后,由于create role时不为用户赋予login权限,赋予login权限即可postgres=# alter user root login;

正常情况下,安装完成后,PostgreSQL服务器会自动在本机的5432端口开启。

如果还想安装图形管理界面,可以运行下面命令。(pgadmin3 是一个设计,维护和管理 Postgres 数据库用的通用工具)
sudo apt-get install pgadmin3

连接不成功要注意的地方:注意服务器的防火墙规则、修改服务器连接监听 ( postgersql.conf 配置文件 )、修改连接认真方式 ( pg_hba.conf 配置文件 )。

2. 添加新用户和新数据库

PostgreSQL 安装后,默认生成一个名为 postgres 的数据库 和 一个名为 postgres 的数据库用户。这里需要注意的是,同时还生成了一个名为 postgres 的 Linux 系统用户,并且属于 postgres 用户组(可以 su - postgres ,然后执行 groups 命令,可以看到 属于 postgres 组)。

下面,我们使用 postgres 用户,来生成其他用户和新数据库。好几种方法可以达到这个目的,

这里介绍两种。一是先进入psql环境,即使用 PostgreSQL控制台,然后再连接数据库。二是直接在系统shell下执行psql命令。

下面分别给出实例:

第一种方法,使用PostgreSQL控制台。

首先,新建一个Linux新用户,可以取你想要的名字,这里为dbuser。命令:sudo adduser dbuser

然后,切换到postgres用户。命令:sudo su - postgres
下一步,使用psql命令登录PostgreSQL控制台。命令:psql
这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这时不用输入密码(默认创建的 postgres 用户没有密码)
如果一切正常,系统提示符会变为"postgres=#",表示这时已经进入了数据库控制台。以下的命令都在控制台内完成。

第一件事:使用\password命令,为postgres用户设置一个密码。          命令:\password postgres第二件事:创建数据库用户dbuser(刚才创建的是Linux系统用户),并设置密码。          命令:CREATE USER dbuser WITH PASSWORD 'password';第三件事:创建用户数据库,这里为exampledb,并指定所有者为dbuser。          命令:CREATE DATABASE exampledb OWNER dbuser;第四件事:将exampledb数据库的所有权限都赋予dbuser,否则dbuser只能登录控制台,没有任何数据库操作权限。          命令:GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;最后,使用\q命令退出控制台(也可以直接按ctrl+D)。命令:\q

第二种方法,使用shell命令行。

添加新用户和新数据库,除了在PostgreSQL控制台内,还可以在shell命令行下完成。这是因为PostgreSQL提供了命令行程序createuser和createdb。

还是以新建用户dbuser和数据库exampledb为例。
首先,创建数据库用户dbuser,并指定其为超级用户。命令:sudo -u postgres createuser --superuser dbuser
然后,登录数据库控制台,设置dbuser用户的密码,完成后退出控制台。
sudo -u postgres psql
\password dbuser
\q
接着,在shell命令行下,创建数据库exampledb,并指定所有者为dbuser。命令:sudo -u postgres createdb -O dbuser exampledb

3. 登录数据库

添加新用户和新数据库以后,就要以新用户的名义登录数据库,这时使用的是psql命令。

psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432
上面命令的参数含义如下:-U指定用户,-d指定数据库,-h指定服务器,-p指定端口。
输入上面命令以后,系统会提示输入dbuser用户的密码。输入正确,就可以登录控制台了。
psql命令存在简写形式。如果当前Linux系统用户,同时也是PostgreSQL用户,则可以省略用户名(-U参数的部分)。
举例来说,我的Linux系统用户名为ruanyf,且PostgreSQL数据库存在同名用户,则我以ruanyf身份登录Linux系统后,可以直接使用下面的命令登录数据库,且不需要密码。
psql exampledb
此时,如果PostgreSQL内部还存在与当前系统用户同名的数据库,则连数据库名都可以省略。比如,假定存在一个叫做ruanyf的数据库,则直接键入psql就可以登录该数据库。
psql
另外,如果要恢复外部数据,可以使用下面的命令。
psql exampledb < exampledb.sql

4. 控制台命令

除了前面已经用到的\password命令(设置密码)和\q命令(退出)以外,控制台还提供一系列其他命令。

\h:查看SQL命令的解释,比如\h select。\?:查看psql命令列表。\l:列出所有数据库。\c [database_name]:连接其他数据库。\d:列出当前数据库的所有表格。\d [table_name]:列出某一张表格的结构。\du:列出所有用户。\e:打开文本编辑器。\conninfo:列出当前数据库和连接的信息。

常用命令

(1)列出所有的数据库    mysql: show databases    psql: \l或\list(2)切换数据库    mysql: use dbname    psql: \c dbname(3)列出当前数据库下的数据表    mysql: show tables    psql: \dt     或者 \d(4)列出指定表的所有字段    mysql: show columns from table name    psql: \d tablename(5)查看指定表的基本情况    mysql: describe tablename    psql: \dt tablename    或者 \d 表名(6)退出登录    mysql: quit 或者\q    psql:\q查看某个库中某个表的记录:select * from apps limit 1;显示字符集:\encoding

配置postgresql

[root@rudder data]# mkdir -p /var/lib/pgsql/data      //创建pgsql的数据库目录  [root@rudder pgsql]# cd /var/lib/pgsql  [root@rudder pgsql]# chown postgres.postgres data     //改变目录的所属用户用组  [root@rudder pgsql]# su  postgres                     //切换到postgres,不然初始化不了  bash-3.2$ initdb -E UTF-8 -D /var/lib/pgsql/data --locale=en_US.UTF-8 -U postgres -W   //初始化数据库  The files belonging to this database system will be owned by user "postgres".  This user must also own the server process.    The database cluster will be initialized with locale en_US.UTF-8.    fixing permissions on existing directory /var/lib/pgsql/data ... ok  creating directory /var/lib/pgsql/data/global ... ok  creating directory /var/lib/pgsql/data/pg_xlog ... ok  creating directory /var/lib/pgsql/data/pg_xlog/archive_status ... ok  creating directory /var/lib/pgsql/data/pg_clog ... ok  creating directory /var/lib/pgsql/data/pg_subtrans ... ok  creating directory /var/lib/pgsql/data/pg_twophase ... ok  creating directory /var/lib/pgsql/data/pg_multixact/members ... ok  creating directory /var/lib/pgsql/data/pg_multixact/offsets ... ok  creating directory /var/lib/pgsql/data/base ... ok  creating directory /var/lib/pgsql/data/base/1 ... ok  creating directory /var/lib/pgsql/data/pg_tblspc ... ok  selecting default max_connections ... 100  selecting default shared_buffers ... 1000  creating configuration files ... ok  creating template1 database in /var/lib/pgsql/data/base/1 ... ok  initializing pg_authid ... ok  Enter new superuser password:     //超级管理员密码  Enter it again:                   //确认密码  initdb: removing contents of data directory "/var/lib/pgsql/data"
这样就初始化就好了。
修改/var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'     //监听所有ip的连接,默认是本机  port = 5432             //这个不开也行,默认就是5432端口
pgsql是命令行的管理工具,但是开发时肯定要用pgadmin远程连接。所以权限是要放大,listen_addresses = '*' 全部放开,当然也可以,设置局域网的IP段。
修改/var/lib/pgsql/data/pg_hba.conf
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD  # "local" is for Unix domain socket connections only   local   all         all                               trust  # IPv4 local connections:   host    all         all         127.0.0.1/32          md5   host    all         all         0.0.0.0/0             md5   //这一行我加的,所有IP和用户,密码对都可以连接  # IPv6 local connections:   host    all         all         ::1/128               md5
启动并查看
[root@rudder data]# /etc/init.d/postgresql start   //启动  Initializing database: [  OK  ]  Starting postgresql service: [  OK  ]    [root@rudder data]# netstat -tpnl |grep 5432       //查看  tcp        0      0 127.0.0.1:5432              0.0.0.0:*                   LISTEN      27806/postmaster
用postgres用户登录,并改密码
[root@rudder data]# su postgres  //切换用户  bash-3.2$ psql -U postgres    //连接pgsql server  Welcome to psql 8.1.23, the PostgreSQL interactive terminal.    Type:  \copyright for distribution terms         \h for help with SQL commands         \? for help with psql commands         \g or terminate with semicolon to execute query         \q to quit    postgres=# Alter USER postgres WITH PASSWORD '***密码**';  //添加密码  ALTER ROLE        //出现这个才算成功,第一次操作没成功,pgadmin连不上  postgres-# \q     //退出

5. 数据库操作

基本的数据库操作,就是使用一般的SQL语言。

# 创建新表     CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);# 插入数据     INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');# 选择记录     SELECT * FROM user_tbl;# 更新数据     UPDATE user_tbl set name = '李四' WHERE name = '张三';# 删除记录     DELETE FROM user_tbl WHERE name = '李四' ;# 添加栏位     ALTER TABLE user_tbl ADD email VARCHAR(40);# 更新结构     ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;# 更名栏位     ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;# 删除栏位     ALTER TABLE user_tbl DROP COLUMN email;# 表格更名     ALTER TABLE user_tbl RENAME TO backup_tbl;# 删除表格     DROP TABLE IF EXISTS backup_tbl;

          开源数据库 PostgreSQL 中文资料非常缺乏,很多社区朋友苦于上手的中文资料少,因此汇总收集以下 PostgreSQL 中文资料,包括 PostgreSQL 中文手册,中文书籍,技术博客,培训视频和历届 PostgreSQL 大会材料。希望这些中文资料能够方便有需要的朋友,降低 PostgreSQL 的上手门槛。


中文社区网站 

  • PostgreSQL 中文社区官网:  

官方手册中文版
  • PostgreSQL 中文手册:   

推荐书籍( 中文 )

技术博客

  • 德哥:      
  • 谭峰(francs):    
  • 陈立群(kenyon):   
  • 唐成(osdba):    
  • 那海蓝蓝:      
  • 有理想的猪:    
  • 大肚熊:        
  • Stephen_Liu:   
  • David_Tang:    
  • beigang:          
备注:排名不分先后,找到合适的博客再补充。

视频教程
PostgreSQL 培训视频教程(德哥): 

你可能感兴趣的文章