PostgreSQL

来自开放百科 - 灰狐
2019年9月8日 (日) 02:34Allen (讨论 | 贡献)的版本

跳转到: 导航, 搜索

Postgresql.jpg PostgreSQL: 世界上最高级的开源数据库

目录

新闻

Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 PostgreSQL Thanks, Wikipedia.

访问 https://planet.postgresql.org/ 了解PostgreSQL最新动态。

简介

Postgresql-90x90.png

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。

PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。

PostgreSQL 提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如 ODBC,JDBC,Python,Perl ,Tcl,C/C++,ESQL 等。

PostgreSQL 已经完全可以胜任任何中上规模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有 TB 级的数据量,已经逼近 32 位计算的极限。 PostgreSQL是目前支持平台最多的数据库管理系统的一种, 所支持的平台多达十几种,包括不同的系统,不同的硬件体系。至今,它仍然保持着支持平台最多的数据库管理系统的称号。

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

总而言之,PostgreSQL的特性已经完全可以满足绝大部分用户的需要,而且其质量和特性仍然在日新月异地进步着,所以, 我们有理由相信在不远的将来,PostgreSQL 肯定能够成为一种优秀的,自由的,商业数据库的替代产品。

版本

11

10

9.6

9.5

9.4

PostgreSQL 9.4

9.3

PostgreSQL 9.3 正式发布

9.2

PostgreSQL 9.2

9.x

PostgreSQL 9.0 正式版发布

Feature Matrix

安装指南

./configure --with-perl // Pl/PerlU
gmake // ln -s /usr/bin/make /usr/bin/gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres // sudo su postgres 
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data 
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data  & or
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
netstat -plunt | grep 5432

gmake 可能出现的问题 /usr/bin/ld: cannot find -lperl

apt-get install libperl-dev

可能遇见的问题:could not bind IPv4 socket: Cannot assign requested address

修改 /usr/local/pgsql/data/postgresql.conf

listen_addresses = 'localhost,192.168.1.101'

error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory

 ldd /home/pgsql/bin/psql

linux-gate.so.1 => (0xf76ec000) libpq.so.5 => not found

vi /etc/ld.so.conf,加入
/home/pgsql/lib

 然后执行:ldconfig OK:)

端口开放

iptables -L

vim /etc/iptables.rules

-A INPUT -p tcp --dport 5432 -j ACCEPT

iptables-restore < /etc/iptables.rules

postgresql.conf

listen_addresses = '*'
port = 5432

pg_hba.conf

host all all 0.0.0.0/0 md5

Debian

PGDG(PostgreSQL全球开发组) 维护着PostgresSQL的Debian仓库

创建 /etc/apt/sources.list.d/pgdg.list

deb http://apt.postgresql.org/pub/repos/apt/ sid-pgdg main // sid 换成 wheezy、squeeze
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql pgadmin3

OS X

维护着最新版本PostgeSQL的安装 https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgresql.rb

brew info postgresql
brew install postgresql
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
postgres -D /usr/local/var/postgres -i -l & 

Mac OS X packages

Windows

在Windows下使用非安装版, 如 postgresql-9.0.0-1-windows-binaries.zip

先解压到PostgreSQL包到 D:\pgsql

在命令行输入 runas /usr:postgres cmd // 切换到 postgres 账号

创建 data 的文件夹 D:\pgsql\mkdir data
D:\pgsql\bin\initdb.exe -D D:\pgsql\data -E UTF8 --locale=C 
D:\pgsql\bin\pg_ctl.exe register -D d:\pgsql\data -N pg9.0 // 注册Windows服务
net start pg9.0 (启动数据库)
net stop pg9.0 (关闭数据库)

8.3

debian 5.0.3 readline not found

apt-get install bison,flex,libreadline5-dev 问题解决
apt-get install zlib1g-dev 解决 zlib没安装的问题

stop postgresql

su postgres or sudo su postgres 
/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data/

注意: postgres在默认是不接受tcp/ip连接的。有两种方式来控制它接受tcp/ip连接,一种是用启动参数 -i ,另一种方式是修改数据库目录里的文件:postgresql.conf中的参数,将tcpip_socket = false改为true port = 5432 前面的注释符号去掉。表示接受tcp/ip在5432的连接。(The tcpip_socket variable from postgres 7.4 is not recognized with postgres 8.1)version 8.0, this is controlled using the "listen_addresses"parameter in the postgresql.conf.

listen_addresses = 'localhost'
listen_addresses = '*' // * = all
listen_addresses = '192.168.1.2','192.168.1.3'

vi pg_hba.conf

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 192.168.1.100 255.255.255.0 password
host all all 127.0.0.1 255.255.255.255 trust
host all postgres 127.0.0.1 255.255.255.255 password
host all all 0.0.0.0/0 md5
host all all 192.168.1.0/16 trust 
or 
host all all 127.0.0.1/32 md5
host all all 192.168.0.0/24 md5
host all all 172.18.0.0/16 md5
or
host all all 172.18.0.0/16 trust

修改后重启:

/etc/init.d/postgresql-7.4 restart

创建一测试用户: test

# edit file /etc/postgresql/pg_hba.conf, and lines at file top:
local   test       test                                          md5
host    test       test     127.0.0.1         255.255.255.255    md5
# su - postgres
$ createuser -ADPE test
$ createdb -O test test
$ createlang plpgsql test
$ exit
# psql -h 127.0.0.1 -U test test

Examples

http://pgfoundry.org/projects/dbsamples/ - A collection of sample databases for PostgreSQL.

请下载 dellstore2 ,大家可用这些数据做实验 :)

如 Dell Store2 database http://linux.dell.com/dvdstore/ , dbsamples 对 dvdstore database 做了 PosgreSQl port,在灰狐的镜像

Dell Store2 Physical Data Diagram

createdb -E LATIN1 dellstore2 -U postgres
createlang plpgsql dellstore2 -U postgres
psql -f dellstore.sql dellstore2 -U postgres or psql -f dellstore.sql dellstore2 postgres // windows

对其它数据库,如 mysql 请下载 ds2.tar.gz 和 ds2_mysql.tar.gz, 并解压到同一目录下, 并事先创建 DS2 数据库和 web/web 的用户信息

命令

PostgreSQL 体系结构和进程概况
  • createdb—Creates a new database in postgreSQL. A database name is required when using this command.
  • createuser—Creates a postgreSQL user. A user name is required when using this command.
  • dropdb—Removes a database from postgreSQL. A database name is required when using this command.
  • dropuser—Removes a postgreSQL user. A user name is required when using this command.
  • initdb—Creates a new postgreSQL database installation. This command is used only once when the database is installed. It creates the base directory. This command cannot be used again.
  • psql—SQL interface to the postgreSQL databases. A database name is required when using this command.
  • vacuumdb—Cleans and analyzes a postgreSQL database.

常用用法

$ createdb mydb
$ dropdb mydb
$ cd src/tutorial
$ export PATH=$PATH:/usr/local/pgsql/bin
$ psql
postgres=# \l 列出所有数据库或 bash-3.1$ psql -l
$ psql -s mydb 
alter user postgres with password 'postgres'; // 密码修改生效,可能要修改 pg_hba.conf 的认证方式: md5, trust
mydb=> \dt 命令是显示表
mydb=> \di 显示索引
mydb=> \ds 显示序列
mydb=> \dv 显示视图
mydb=> \dp 显示权限
mydb=> \dS 显示系统表
mydb=> \dl 显示 lobjects
mydb=> \d tablename 显示表的结构/索引/序列
mydb=> \d indexname 显示索引的详细信息
mydb=> \i basics.sql or basics.source 导入表
mydb=> SELECT version();
mydb=> show all; // 显示运行时参数的数值
备份和恢复
pg_dump -x databasename > outfile
pg_dump.exe -h localhost -p 5432 -U huihoo -F c -b -v -f "D:\backup\opentaps1.0.4.backup" "opentaps1.0.4"
psql -e database < outfile
pg_restore.exe -h localhost -p 5432 -U huihoo -d "opentaps1.0.4" -v "D:\backup\opentaps1.0.4.backup"
CREATE TABLE weather (
   city            varchar(80),
   temp_lo         int,           -- 最低气温
   temp_hi         int,           -- 最高气温
   prcp            real,          -- 降水量
   date            date
);
DROP TABLE tablename;

连接(join)查询

SELECT *
      FROM weather w, cities c
      WHERE w.city = c.name;
postgres@debian:~$ psql -l
       List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 template0 | postgres | EUC_CN
 template1 | postgres | EUC_CN
 test      | postgres | EUC_CN
(3 rows)
postgres@debian:~$ psql template1
template1=# select * from pg_tables;
template1=# create user huihoo password 'huihoo' createdb;
mydb=# select md5('abc');
mydb=# select btrim('xyxtrimyyx','xy');
mydb=# select ltrim('zzzytrim','xyz');

http://docs.huihoo.com/postgresql/postgresql-doc-7.4-zh_CN/functions-string.html

PostgreSQL Limits

Limit Value

  • Maximum Database Size Unlimited
  • Maximum Table Size 32 TB
  • Maximum Row Size 1.6 TB
  • Maximum Field Size 1 GB
  • Maximum Rows per Table Unlimited
  • Maximum Columns per Table 250 - 1600 depending on column types
  • Maximum Indexes per Table Unlimited

PostgreSQL发行版

  • Amalgamated Insight ... proprietary ... Fork of TelegraphCQ
  • Bizgres ... BSD ... PostgreSQL + BI features
  • Bizgres MPP ... proprietary ... PostgreSQL + BI features
  • EnterpriseDB ... proprietary ... PostgreSQL + Oracle compatibility
  • ExtenDB ... proprietary ... PostgreSQL + BI Features
  • Great Bridge PostgreSQL ... BSD ... PostgreSQL re-distribution
  • Mammoth ... BSD ... PostgreSQL + contrib modules
  • Netezza ... proprietary ... Appliance based on PostgreSQL SQL engine
  • NuSphere UltraSQL ... proprietary ... Native Win32 port of PostgreSQL
  • parACCEL ... proprietary ... PostgreSQL + BI features
  • Pervasive PostgreSQL ... BSD ... PostgreSQL re-distribution
  • PowerGres ... proprietary ... Native Win32 port of PostgreSQL
  • PowerGres Plus ... proprietary ... PostgreSQL + custom storage engine
  • PostgreSQL for Solaris 10 ... BSD ... PostgreSQL re-distribution
  • Red Hat Database ... BSD ... PostgreSQL re-distribution
  • TelegraphCQ ... BSD ... Data Stream oriented fork of PostgresSQL

from http://www.postgresql.org/docs/techdocs.62


Graphical Clients

PostGIS

PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。

HA,Scaleable

Replication, Clustering, and Connection Pooling

Patroni是一个基于 Python 的 PostgreSQL 控制器,它利用分布式配置存储(例如etcd, ZooKeeper, Consul)管理PostgreSQL 集群的状态。同时它还支持流复制和同步复制模型,并提供了一组丰富的REST API,用于PostgreSQL集群的动态配置。如果你想在分布式PostgreSQL设置中实现高可用性,并且不得不考虑许多边缘情况,令人欣慰的是,Patroni 提供了模板来实现常见的用例。(来源:Technology Radar)

Cloud

Cloud-database.png

BigData/Storage

Powered by best-in-class open source software including the Solaris Operating System (OS), PostgreSQL, and ZFS.

http://www.greenplum.com/solutions/sun_Appliance.php

DW,BI

内存数据库

NoSQL

PostgreSQL NoSQL Style

Mongodb-v2.6-postgresql-v9.4-50mil-records-numeric.png

GPU

PGStrom PostgreSQL的GPU加速

PGStorm

C,C++

Go

Ruby

gem install activerecord-postgresql-adapter
gem install pg
export RAILS_ENV=production
vim Gemfile , add 
gem 'pg'
rake db:create
rake db:migrate

PHP

Postgresql-php.gif

Python

Java

driver: org.postgresql.Driver
url: jdbc:postgresql://host:port/database
database.url = jdbc:postgresql://localhost:5432/test?charSet=utf8
// database.url = jdbc:mysql://localhost:3306/test?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true

.NET

Npgsql

JavaScript

迁移

将用户从 Oracle, DB2, Microsoft SQL Server, MySQL 等数据库迁移到 PostgreSQL

Oracle

DB2

SQL Server

MySQL

项目

More Projects:

商业支持

成功应用

hi5 includes multiple terabytes of data and media files stored across an array of PostgreSQL databases and an EXT3 file system. The hi5 application was written in Java and runs on hundreds of Resin application servers and Apache web servers. The data center is filled with machines ranging from Dell Blades, SuperMicros, Dell 8-way Servers – most of which run SuSE Linux.

  • yahoo

雅虎数据库技术最初出自于2005年底被雅虎低调收购的Mahat技术公司。雅虎使用的数据库是深度改良的PostgreSQL,用为其商用硬件集群专门设计的代码来取代查询处理层。传统的数据排列方式是按照行进行的,而雅虎则选择用分布式列来存储数据。

文档

在线文档

更多文档>>>

Mailing Lists

Debian

PostgreSQL on Debian

创建 /etc/apt/sources.list.d/pgdg.list

lsb_release -c
添加 deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
or wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | apt-key add -
sudo apt-get update
sudo apt-get install postgresql pgadmin3

OpenSolaris

PostgreSQL for Solaris Blogs on PostgreSQL

PostgreSQL on Solaris Wiki: http://wikis.sun.com/display/DBonSolaris/PostgreSQL

MySQL to PostgreSQL

Converting from other Databases to PostgreSQL

PostgreSQL and MySQL

PostgreSQL will eat MySQL for lunch :)
  • Ten times out of ten, PostgreSQL will eat MySQL for lunch (and twice on Sunday).I don't benefit from this at all, but, if you're a PostgreSQL user, DBA, programmer, hacker, etc., and like that logo

from http://people.freebsd.org/~seanc/

PostgreSQL and Redis

Buttons

Postgresql 80x15.png Postgresql-137x30.png

图集

用户

书籍

链接

@网路冷眼【PostgreSQL毫秒级全文本搜索】本文并没有采用 Apache Solr后者Elasticsearch的开源方案,也没有采用Elastic或者Algolia的托管方案,而是采用了Postgres来做全文本搜索,并解释了这种方式的优点,不失为搜索的一种解决方案。

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱