欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
PostgreSQL
新闻
您可以在Wikipedia上了解到此条目的英文信息 PostgreSQL Thanks, Wikipedia. |
访问 https://planet.postgresql.org/ 了解PostgreSQL最新动态。
简介
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 肯定能够成为一种优秀的,自由的,商业数据库的替代产品。
版本
13
12
11
10
9.6
9.5
9.4
9.3
9.2
9.x
PostgreSQL 9.0 正式版发布
安装指南
./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 &
- 或者 Postgres.app 便捷安装。
- 或者 安装 EnterpriseDB 很方便。
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 的用户信息
命令
- 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
- EnterpriseDB http://www.enterprisedb.com/
- Pervasive http://www.pervasive.com/
- PostgreSQL Red Hat Edition http://sourceware.org/rhdb/
图形客户端
- pgModeler
- SQuirreL SQL Client
- pgAdmin III - Cross-platform administration tool
- PhpPgAdmin - Web-based PostgreSQL administration tool
- pgDesigner - Datamodel designer for PostgreSQL
PostGIS
PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。
HA,Scaleable
- Postgres-XL
- TBase
- pgpool
- Greenplum
- http://www.linuxlabs.com
- Slony-I
- Usogres
- PGCluster
- Mammoth PostgreSQL Replication
- pgmemcache
Replication, Clustering, and Connection Pooling
- Scalable PostgreSQL as your data platform
- PostgreSQL 9 High Availability with Linux-HA
- Implementing High Availability
- PostgresXC Tutorial - Configuring write-scalable PostgreSQL cluster
- Patroni A Template for PostgreSQL HA with Apache ZooKeeper, etcd or Consul
Patroni是一个基于 Python 的 PostgreSQL 控制器,它利用分布式配置存储(例如etcd, ZooKeeper, Consul)管理PostgreSQL 集群的状态。同时它还支持流复制和同步复制模型,并提供了一组丰富的REST API,用于PostgreSQL集群的动态配置。如果你想在分布式PostgreSQL设置中实现高可用性,并且不得不考虑许多边缘情况,令人欣慰的是,Patroni 提供了模板来实现常见的用例。(来源:Technology Radar)
Cloud
- Azure Database for PostgreSQL
- Amazon RDS for PostgreSQL
- RDBMS in the Cloud: PostgreSQL on AWS
- PostgreSQL on AWS
- Postgres in Amazon RDS
- Amazon Redshift – 云数据仓库解决方案
- Heroku Postgres, The SQL database service for developers.
- Aiven PostgreSQL
- Crunchy Data Crunchy PostgreSQL for Kubernetes
BigData/Storage
- HadoopDB - hybrid of MapReduce and DBMS.
- IBM Netezza - high-performance data warehouse appliances.
- Postgres-XL - Scalable Open Source PostgreSQL-based Database Cluster.
- RecDB - Open Source Recommendation Engine Built Entirely Inside PostgreSQL.
- Stado - open source MPP database system solely targeted at data warehousing and data mart applications.
- Yahoo Everest - multi-peta-byte database / MPP derived by PostgreSQL.
- The Billion Tables Project
- Gaia: Mapping a billion stars throughout our Galaxy and beyond
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
- Greenplum: Massively-Parallel, Shared-Nothing Database based on PostgreSQL.
- Data warehousing with PostgreSQL
- Building PetaByte Warehouses with Unmodified PostgreSQL
- Analytic SQL Server - next generation analytic Data Warehouse with OLAP support
内存数据库
- In-Memory Columnar Store extension for PostgreSQL
- In-memory database for PostgreSQL
- VoltDB vs. PostgreSQL
时序数据库
NoSQL
PostgreSQL NoSQL Style
GPU
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
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
JavaScript
- node.js (integrate with 9.2's JSON and PL/v8)
- PostgreSQL for JavaScript: 一个实现了PostgreSQL前/后端协议的JavaScript库。
迁移
将用户从 Oracle, DB2, Microsoft SQL Server, MySQL 等数据库迁移到 PostgreSQL
Oracle
- Oracle和PostgreSQL的最新版本性能PK, PostgreSQL 9.5.0和Oracle 12c
- pgORA
- Migrating Oracle databases to PostgreSQL Best practices
- Porting Oracle Applications to PostgreSQL
- Openbravo Oracle to PostgreSQL migration
- "A Tale of Two Oracle Migrations" Deploying PostgreSQL at Japan's second-largest stock exchange
DB2
SQL Server
MySQL
项目
- Awesome Postgres
- PostgreSQL-related interfaces, extensions and software
- CitusDB
- Greenplum
- Postgres-XL
- pgmemcache
- PgBouncer
- SkyTools
- PL/Proxy
- pg_bulkload
- PgWorksheet
- pgpool
- PostgresPy
- PostgreSQL Build Farm
- mysql2pgsql
- Autodoc
- ZomboDB Making PostgreSQL and Elasticsearch work together
More Projects:
商业支持
- Fujitsu Supported PostgreSQL - http://postgresql.fastware.com
- PostgreSQL for Solaris 10 - http://www.sun.com/software/solaris/postgresql.jsp
成功应用
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,用为其商用硬件集群专门设计的代码来取代查询处理层。传统的数据排列方式是按照行进行的,而雅虎则选择用分布式列来存储数据。
文档
在线文档
- PostgreSQL devel Documentation
- PostgreSQL 9.1 English Document
- PostgreSQL 9.0 English Document
- PostgreSQL 9.3 中文手册
- PostgreSQL 8.1 中文文档
- PostgreSQL 8.0.0 中文文档
- PostgreSQL 7.4 中文文档
- PostgreSQL 7.3.3 中文文档
- PostgreSQL 7.1.1 中文文档
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
- Josh Berkus: http://blogs.ittoolbox.com/database/soup
- Jignesh Shah: http://blogs.sun.com/jkshah/
- Paul van den Bogaard: http://blogs.sun.com/paulvandenbogaard/
- Robert Lor: http://blogs.sun.com/robertlor/
- Tom Daly: http://blogs.sun.com/tomdaly/
PostgreSQL on Solaris Wiki: http://wikis.sun.com/display/DBonSolaris/PostgreSQL
MySQL to PostgreSQL
Converting from other Databases to PostgreSQL
PostgreSQL and MySQL
- 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
图集
用户
- 阿里巴巴
- Gandi.net using PostgreSQL for the Gandi IAAS/PAAS platform and recently internally, to build one of our live systems that stores/computes/outputs millions rows daily, very easily.
- http://reddit.com
- http://www.openstreetmap.org/ OpenStreetMap moves to PostgreSQL
- 饿了么 PostgreSQL 优化之旅
书籍
链接
- http://www.postgresql.org
- pgAdmin http://www.pgadmin.org/
- phpPgAdmin http://phppgadmin.sourceforge.net
- PostgreSQL 中文网 http://www.pgsqldb.org/
- http://docs.huihoo.com/postgresql/
- http://download.huihoo.com/postgresql/
- 数据库迁移:将你的网站从MySQL改为PostgreSQL http://linux.chinaunix.net/docs/2006-12-06/3413.shtml
- PostgreSQL BuildFarm http://www.pgbuildfarm.org
- PGXN, the PostgreSQL Extension network
- 再见MongoDB,你好PostgreSQL
- Full text search in milliseconds with PostgreSQL
- 德哥 / digoal's github - 公益是一辈子的事.
@网路冷眼【PostgreSQL毫秒级全文本搜索】本文并没有采用 Apache Solr后者Elasticsearch的开源方案,也没有采用Elastic或者Algolia的托管方案,而是采用了Postgres来做全文本搜索,并解释了这种方式的优点,不失为搜索的一种解决方案。