PostGreSql安装

 

前言

何为PostgreSQL?

PostgreSQL是以加州大学伯克利分校计算 机系开发的 POSTGRES, Version 4.2 为基础的对象关系型数据库管理系统(ORDBMS) POSTGRES领先的许多概念只是在非常迟的时候才出现在商业数据库中。

PostgreSQL是最初伯克 利代码的一个开放源码的继承人。它支持大部分 SQL标准并且提供了许多其它现代特性:

  • 复杂查询
  • 外键
  • 触发器
  • 视图
  • 事务完整性
  • 多版本并发控制

    另外,PostgreSQL 可以用许多方法进行扩展,比如通过增加新的:

  • 数据类型
  • 函数
  • 操作符
  • 聚合函数
  • 索引方法
  • 过程语言

    并且,因为许可证的灵活,任何人都可以以任何目的 免费使用、修改、分发PostgreSQL 不管是私用、商用、还是学术研究使用。

    PostgreSQL简史

    作为一款出名的对象-关系型数据库管理系统, PostgreSQL是从美国加州大学伯克利分校写的POSTGRES软件包发展而来的。 经过超过二十多年的发展滞后,PostgreSQL是世界上最先进的开源的数据库系统。

    The Berkeley POSTGRES Project

    Michael Stonebraker领导的POSTGRES项目 是由防务高级研究项目局(DARPA)、陆军研究办公室(ARO)、国家科学基金(NSF)ESL公司共同赞助的。 POSTGRES的实现始于1986年, 该系统最初的概念详见 The design of POSTGRES POSTGRES的设计 ,和 The POSTGRESdata model 中的初始数据模型定义。 最早的数据模型定义见POSTGRES 规则系统的设计 存储管理器的理论基础和体系结构在 POSTGRES存储系统的设计 里有详细描述。

    从那以后,POSTGRES经历了几次主要的版本更新。 第一个"demoware"系统在1987年便可使用了, 并且在1988年的ACM-SIGMOD大会上展出。 19896月发布了版本1(POSTGRES的实现 里有描述)给一些外部的用户使用。 为了回应用户对第一个规则系统的指正( POSTGRES规则系统的注解 ) 我们重新设计了规则系统( 有关数据库系统的规则,过程,缓存和视图 ),并在19906月发布了使用新规则系统的版本2 版本31991年出现,增加了多存储管理器的支持,并且改进了查询执行器,重新编写了规则系统。 从那以后,随后的版本直到Postgres95发布前(见下文),工作都集中在移植性和可靠性上。

    POSTGRES已经在许多研究或实际的应用中得到了应用。 这些应用包括:一个财务数据分析系统、一个喷气引擎性能监控软件包、一个小行星跟踪数据库、一个医疗信息数据库和一些地理信息系统。 POSTGRES还被许多大学用于教学用途。 最后,Illustra Information技术(后来并入Informix 而它现在属于IBM)拿到代码并使之商业化。 1992年末POSTGRES成为Sequoia 2000 scientific computing project的首要数据管理器。

    到了1993年,外部用户的数量几乎翻番。 随着用户的增加,用于源代码维护的时间日益增加,以至占用了太多本应该用于数据库研究的时间, 为了减少支持的负担,伯克利的POSTGRES项目在版本4.2时正式终止。

    Postgres95

    1994年,Andrew YuJolly ChenPOSTGRES中增加了SQL语言的解释器, 并随后将Postgres95的源代码发布到互联网上供大家使用, 从而成为一个开放源码的原伯克利POSTGRES的继承者。

    Postgres95所有源代码都是完全的ANSI C,而且代码量减少了25% 并且有许多内部修改以利于提高性能和代码的可维护性。 Postgres95版本1.0.x在进行Wisconsin Benchmark测试时大概比POSTGRESv4.2 30%-50% 除了修正了一些错误,下面的是一些主要改进:

  • 原来的查询语言PostQUELSQL取代(在服务器端实现) PostgreSQL之前还不支持子查询(见下文) 但这个功能可以在Postgres95里面由用户定义的SQL函数实现, 重新实现了聚集,同时还增加了对GROUP BY查询子句的支持。
  • 新增加了利用GNUReadline进行交互SQL查询(psql) 这个程序很大程度上取代了老的monitor程序。
  • 增加了新的前端库(libpgtcl) 用以支持以Tcl为基础的客户端。 一个样本shell(pgtclsh) 提供了新的Tcl命令用于Tcl程序和Postgres95后端之间的交互。
  • 彻底重写了大对象的接口,保留了将大对象倒转(inversion)作为存储大对象的唯一机制,去掉了倒转(inversion)文件系统。
  • 去掉了实例级的规则系统,但我们仍然可以通过重写规则来使用规则。
  • 在发布的源码中增加了一个简短的常用SQLPostgres95特有的SQL特性的教程。
  • GNUmake取代了BSDmake用于编译。 Postgres95可以使用不加补丁的GCC进行编译(修正了偶数字节数据的对齐问题)

    PostgreSQL

    到了1996年,我们很明显的看出"Postgres95"这个名字已经经不起时间的考验了。 于是我们起了一个新名字PostgreSQL 用于反映最初的POSTGRES和最新的使用SQL的版本之间的关系。 同时版本号也重新从6.0开始,将版本号放回到最初的由伯克利POSTGRES项目开始的顺序中。

    许多人处于习惯或者拼写简单的原因,将PostgreSQL称为"Postgres",这种称法被当做绰号或者别名而广泛接受。

    Postgres95版本的开发重点放在标明和理解现有的后端代码的问题上。 PostgreSQL开发重点转到了一些有争议的特性和功能上面,当然各个方面的工作同时都在进行。

    自那以来,PostgreSQL发生的变化可以在Appendix E发行注记里面找到

    格式约定

    本书使用下面的格式约定来标记某些特定的文本:新术语、外来词以及其 它重要的段落用斜体着重标出。所有表示计算机的输入与 输出,特别是命令、程序代码、以及屏幕输出等,都用等宽字体 (example)标出。在这样的段落里,斜体 (example)表示占位符,你必须在占位符的 地方插入实际的数值。有时候,部分程序代码会用粗体 (example)显示,这是因为它们 是在前面的例子之后经过了修改。

    下面的格式用于命令的大纲:方括弧([和]) 表示可选的部分(Tcl命令里使用的是问号(?)。花括弧({ })和竖条(|)表示你必须选取一 个候选。连续点(...)表示前面的元素可以重复。

    如果能提高清晰度,那么SQL命令使用前缀提示符=>, shell命令使用前缀提示符prompt $。不过,通常是不 显示提示符的。

     

     

     

    安装

    如果你不清楚PostgreSQL是否已经安装,或者 不知道你能否用它做自己的实验,那么你可以自己安装。这么做并不难,并且 是一次很好的练习。

    https://www.postgresql.org/download/官网安装地址

    PostgreSQL以由任何非特权 用户安装,并不需要超级用户(root)的权限

    作者的安装环境是ubuntu 16.04

    体系基本概念

    PostgreSQL使用一种客户 /服务器的模式。一次PostgreSQL会话由下列相关的进程(程序)组成:

  • 一个服务器进程,它管理数据库文件,接受来自客户端应用与数据库的连接, 并且代表客户端在数据库上执行操作。数据库服务器程序叫postgres。
  • 那些需要执行数据库操作的用户客户端(前端)应用。客户端应用可能本身 就是多种多样的:它们可以是一个字符界面的工具,也可以是一个图形界面 的应用,或者是一个通过访问数据库来显示网页的web服务器,或者是一个 特殊的数据库管理工具。一些客户端应用是和PostgreSQL发布一起提供的,但绝大部分是用户开发的。
  •  

    和典型的客户端/服务器应用(C/S应用)一样,这些客户端和服务器可以在不同 的主机上。这时它们通过TCP/IP网络连接通讯。你应该记住的是,在客户机 上可以访问的文件未必能够在数据库服务器机器上访问(或者只能用不同的文件 名进行访问)

    PostgreSQL服务器可以处理来自客户端的多个并发请求。因此,它为每个请求 启动("forks")一个新的进程。从这个时候开始,客户端和新服务器进程就不再 经过最初的postgres进程进行通讯。因此,主服务器总是在运行,等待连接, 而客户端及其相关联的服务器进程则是起起停停。当然,用户是肯定看不到这 些事情的。

     

    创建一个数据库

    以创建一个mydb新数据库为例:

    $ createdb mydb

    如果没有报错,那么这一步就成功了,你就可以忽略本节余下的部分了。

     

    如果返回类似信息:

    createdb: command not found

    说明PostgreSQL没有正确安装,要么是完全没有安装,要么是设置的环境变量有错误,如果是这样,那么可以用绝对路径调用该命令:

    $ /usr/local/pgsql/bin/createdb mydb

    在你的节点上这个路径可能不一样。请和管理员联系或者看看安装指导以获取 正确的位置。

    另外一种响应可能是这样:

    createdb: could not connect to database postgres: could not connect to server: No such file or directory

    Is the server running locally and accepting

    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

    这意味着服务器没有启动,或者没有在createdb预期的地方启动。同样, 你也要检查安装指导或者找管理员。

    另外一个响应可能是这样:

    createdb: could not connect to database postgres: FATAL: role "joe" does not exist

    在这里提到了你自己的登陆名。如果管理员没有为你创建PostgreSQL用户帐号, 就会发生这些现像。PostgreSQL用户帐号和操作系统用户帐号是不同的。如果你 就是管理员,参阅Chapter 20以获取创建用户帐号的帮助。

    你需要变成安装PostgreSQL 的操作系统用户的身份(通常是postgres)才能创建第一个用户帐号。 也有可能是赋予PostgreSQL用户名和操作系统用户名不同;这种情况下,你需要 使用-U开关或者使用PGUSER环境变量声明PostgreSQL用户名。

    python@ubuntu:~$ sudo passwd postgres #更改一个密码

    python@ubuntu:~$ su – postgres             #切换到操作系统用户身份

    postgres@ubuntu:~$ createdb mydb;

    postgres@ubuntu:~$

     

    如果你有个数据库用户帐号,但是没有创建数据库所需要的权限,那么你会看到 下面的东西

    createdb: database creation failed: ERROR: permission denied to create database

    并非所有用户都经过了创建新数据库的授权。如果PostgreSQL拒绝为你创建数据库, 那么你需要让节点管理员赋予你创建数据库的权限。出现这种情况时请咨询你的节点 管理员。如果你自己安装了PostgreSQL,那么你应该以你启动数据库服务器的用户 身份登陆然后参考手册完成权限的赋予工作。 [1]

    你还可以用其它名字创建数据库。PostgreSQL 允许你在一个节点上创建任意数量的数据库。数据库名必须是以字母开头并且 小于63个字符长。一个方便的做法是创建和你当前用户名同名的数据库。许多 工具假设它为缺省的数据库名,所以这样可以节省敲键。要创建这样的数据库, 只需要键入:

    $ createdb

    如果你再也不想使用你的数据库了,那么你可以删除它。比如,如果你是数 据库mydb的属主(创建人),那么你就可以用下面的命令 删除它:

    $ dropdb mydb

    访问数据库

    一旦创建了数据库,你就可以访问它:

  • 运行PostgreSQL交互的终端程序 psql,它允许你交互地输入、 编辑、执行SQL命令。
  • 使用我们现有的图形前端工具,比如pgAdmin或者 ODBCJDBC支持的办公套件来创建和管理数据库。 这种方法在这份教程中没有介绍。
  • 使用多种语言绑定中的一种写一个客户应用。这些可能性在Part IV 中有更深入的讨论。

    你可能需要启动psql来试验本教程中的例子。你可以用 下面的命令为mydb数据库激活它:

    $ psql mydb

    如果你省略了数据库名字,那么它缺省就是你的用户账号名字。你已经通过使用 createdb在前面的小节里了解这一点了。

    在psql里,你会看到下面的欢迎信息:

    psql (9.0.4)

    Type "help" for help.

     

    mydb=>

    最后一行也可能是:

    mydb=#

    这个提示符意味着你是数据库超级用户,最可能出现在你自己安装了PostgreSQL 的情况下。作为超级用户意味着你不受访问控制的限制。对于本教程的目的而言, 是否超级用户并不重要。

    如果你启动psql时碰到了问题,那么回到前面的小节。 诊断createdb的方法和诊断psql的方 法很类似,如果前者能运行那么后者也应该能运行。

    psql打印出的最后一行是提示符,它表示psql 正听着你说话,这个时候你就可以敲入SQL查询到一个psql 维护的工作区中。尝试一下下面的命令:

    mydb=> SELECT version();

    version

    -----------------------------------------------------------------------

    PostgreSQL 9.0.4 on i586-pc-linux-gnu, compiled by GCC 2.96, 32-bit

    (1 row)

     

    mydb=> SELECT current_date;

    date

    ------------

    2002-08-31

    (1 row)

     

    mydb=> SELECT 2 + 2;

    ?column?

    ----------

    4

    (1 row)

    psql程序有一些不属于SQL命令的内部命令。它们以反斜杠 "\"开头。有些这种命令在欢迎信息中列出。比如,你可以用下面的命令获取各种PostgreSQLSQL命令的帮助语法:

    mydb=> \h

    要退出psql,键入:

    mydb=> \q

    然后psql就会退出并且返回到命令行shell(要获取更多 有关内部命令的信息,你可以在psql提示符上键入\?)

    mydb=> \? #查看内部命令

    小命令

    mydb=> \l #l查看所有数据库

    List of databases

    Name | Owner | Encoding | Collate | Ctype | Access privileges

    ------------+----------+----------+-------------+-------------+-----------------------

    dailyfresh | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |

    mydb | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |

    postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |

    (6 rows)

    tmydb=> \d #查看当前数据库上的表

    List of relations

    Schema | Name | Type | Owner

    --------+----------+-------+----------

    public | capitals | table | postgres

    public | cities | table | postgres

    mydb=>\d cities #\d表名查看表结构

    Table "public.cities"

    Column | Type | Modifiers

    ------------+---------+-----------

    name | text          |

        population     | real          |

        altitude      | integer         |

posted @ 2018-09-19 21:49  Robert·Bart  阅读(278)  评论(0编辑  收藏  举报