PostgreSQL总结(1) - 数据库简介及安装

PostgreSQL简介

        PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统)。

  • 优点

        PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。

  • 缺点

        PostgreSQL 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。

==(注意:以下对于PostgreSQL的介绍基于9.4.9版本)==

PostgreSQL安装(ubuntu14.04)

  • 添加源
    创建文件/etc/apt/sources.list.d/pgdg.list,在文件中添加以下信息:
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
  • 更新软件包列表
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -
sudo apt-get update 
  • 安装PostgreSQL服务
sudo apt-get install postgresql-9.4 
  • 安装图形化管理工具

padmin: 这个工具目前只支持9.3,感觉不怎么好用

sudo apt-get install pgadmin3

dbeaver:

下载地址:http://dbeaver.jkiss.org/download/

  • 添加新用户和新数据库

新建一个Linux新用户,用于连接数据库,这里为 pguser。

sudo adduser pguser

然后切换到 postgres 用户。

sudo su - postgres

然后使用psql命令登录PostgreSQL控制台。

psql

这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为”postgres=#”,表示这时已经进入了数据库控制台。以下的命令都在控制台内完成。

使用\password命令,为postgres用户设置一个密码。

\password postgres

创建数据库用户 pguser(刚才创建的是Linux系统用户),并设置密码。

CREATE USER pguser WITH PASSWORD 'password';

创建用户数据库,这里为exampledb,并指定所有者为 pguser。

CREATE DATABASE exampledb OWNER pguser;

将exampledb数据库的所有权限都赋予 pguser,否则 pguser 只能登录控制台,没有任何数据库操作权限。

GRANT ALL PRIVILEGES ON DATABASE exampledb to pguser;

还有一种方式是使用shell命令添加心用户和新的数据库,如下:
创建数据库用户pguser,并指定其为超级用户。

sudo -u postgres createuser --superuser pguser

然后,登录数据库控制台,设置dbuser用户的密码,完成后退出控制台。

sudo -u postgres psql

\password pguser

\q

创建数据库exampledb,并指定所有者为 pguser。

sudo -u postgres createdb -O pguser exampledb
  • 登录数据库
psql -U pguser -d exampledb -h localhost -p 5432

PostgreSQL数据类型

PostgreSQL具有最丰富的数据类型,如下:

Name Aliases Description
bigint int8 signed eight-byte integer
bigserial serial8 autoincrementing eight-byte integer
bit [ (n) ] fixed-length bit string
bit varying [ (n) ] varbit variable-length bit string
boolean bool logical Boolean (true/false)
box rectangular box on a plane
bytea binary data (“byte array”)
character [ (n) ] char [ (n) ] fixed-length character string
character varying [ (n) ] varchar [ (n) ] variable-length character string
cidr IPv4 or IPv6 network address
circle circle on a plane
date calendar date (year, month, day)
double precision float8 double precision floating-point number (8 bytes)
inet IPv4 or IPv6 host address
integer int, int4 signed four-byte integer
interval [ fields ] [ (p) ] time span
json textual JSON data
jsonb binary JSON data, decomposed
line infinite line on a plane
lseg line segment on a plane
macaddr MAC (Media Access Control) address
money currency amount
numeric [ (p, s) ] decimal [ (p, s) ] exact numeric of selectable precision
path geometric path on a plane
pg_lsn PostgreSQL Log Sequence Number
point geometric point on a plane
polygon closed geometric path on a plane
real float4 single precision floating-point number (4 bytes)
smallint int2 signed two-byte integer
smallserial serial2 autoincrementing two-byte integer
serial serial4 autoincrementing four-byte integer
text variable-length character string
time [ (p) ] [ without time zone ] time of day (no time zone)
time [ (p) ] with time zone timetz time of day, including time zone
timestamp [ (p) ] [ without time zone ] date and time (no time zone)
timestamp [ (p) ] with time zone timestamptz date and time, including time zone
tsquery text search query
tsvector text search document
txid_snapshot user-level transaction ID snapshot
uuid universally unique identifier
xml XML data

数据库基本操作

        对于基本的数据库操作就不在这里赘述,由于自己也刚开始接触这个数据哭,这里只是简单介绍一下对于PostgreSQL特有的数据类型array和json的操作以及需要注意的问题。

  1. 新建表person
CREATE TABLE person
(
    id bigserial, --主键,这里的bigserial类型,会自动生成一个名为"[table_name]_id_seq"的sequence
    name text, --姓名
    hobby _text, --爱好
    detail json, --详细介绍
    CONSTRAINT person_pk PRIMARY KEY (id)
);

以上建表语句执行结果如下:

              List of relations
 Schema |     Name      |   Type   |  Owner   
--------+---------------+----------+----------
 public | person        | table    | duanjian
 public | person_id_seq | sequence | duanjian
(2 rows)
  1. 插入数据

执行以下插入语句插入一条数据:

INSERT INTO person 
(name, hobby, detail)
VALUES
('zhangsan', array['football', 'basketball', 'pingpong'], '{"age":18, "sex":"男"}'::json);

查看person表中的数据:

=>SELECT * FROM person;
 id |   name   |             hobby              |         detail         
----+----------+--------------------------------+------------------------
  1 | zhangsan | {football,basketball,pingpong} | {"age":18, "sex":"男"}
(1 row)

        目前笔者也是刚开始使用这个数据库,感觉数据库确实很强大,只是相关的图形化工具不敢恭维。这一部分就先介绍到这里,后续还会进一步介绍。

你可能感兴趣的:(Database)