- CarieVinne
-
MySQL数据库迁移到PostgreSQL
查了不少资料,也尝试了一些,最后采用的办法如下:
1. 导出mysql表定义(无数据)
mysqldump --no-data [dbname] >dbdef.sql
2. 使用mysql2postgres把脚本转换为pgsql
3. 上面生成的脚本还不一定很完美,可以尝试导入pgsql,调试错误并手动修改之。我遇到的问题就只有一个,mysql列定义中的zerofill需要手工去掉。一些unsinged定义会生成constraint,如果不需要可以去掉。另外,trigger都有问题,只能后面手工重建
4. 导出mysql数据:
mysqldump -v -nt --complete-insert=TRUE --compact --no-create-info --skip-quote-names [dbname] >dbdata.sql
老一些版本的pgsql如果不支持批量插入的话还需要加上--extended-insert=FALSE,这个性能损失巨大。
5. 转义符
mysql默认字符串里的""是转义符,而pgsql默认不是,修改postgresql.conf:
backslash_quote = on
escape_string_warning = off
standard_conforming_strings = off
数据导入完成后可以改回默认值。
5. pgsql里导入表定义和数据
psql -d [dbname] <dbdef.sql
psql -d [dbname] <dbdata.sql
6. 重建trigger
7. 自增主键(字段)的处理
由于导入数据时此字段都是有值的,所以pgsql里面seq并不会增加,可以用如下语句设置自增列的当前值:
SELECT setval("sample_id_seq",max(id)) from sample;
postgresql是什么数据库
PostgreSQL是一款高级的企业开源关系数据库,支持SQL、JSON查询,功能健全、可靠性高,MySQL、PostgreSQL等常用数据库国内外服务商都是提供的,用户可以专注开发自己的项目,完全不用管数据库关系操作。以上就是聚名企服的回答,希望对你有所帮助~2023-07-28 17:04:232
postgresql是什么数据库?请详解一下,谢谢
分类: 电脑/网络 >> 程序设计 >> 其他编程语言 解析: PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目, 并且有非常广泛的用户。 PostgreSQL 可以说是最富特色的自由数据库管理系统,甚至我们也可以说是最强大的自由软件数据库管理系统。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。2023-07-28 17:04:391
pg数据库是什么?
PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可以追溯到1986年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上进行了30多年的积极开发。PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。2023-07-28 17:04:461
什么是Postgres
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。2023-07-28 17:04:531
postgresql 和postgis区别是什么?
postgresql是DBMS,是用来存储并管理数据的。而Postgis是DBMS的扩展插件,是让postgresql这个DBMS具有了地理信息系统特有的数据模式与存储过程函数,希望对你有帮助!2023-07-28 17:05:012
postgresql 和postgis区别是什么?
了存储、查询和修改空间关系的能力。本文中 ‘PostgreSQL" 指代基本的关系数据库功能,而 ‘PostGIS" 指代扩展的空间操作特性。客户端-服务器构架PostgreSQL 同众多数据库产品一样,采用客户端-服务器构架。客户端向服务器发出请求并得到响应。这种机制同浏览器从网络服务器获取网页类似。在 PostgreSQL 中,请求以 SQL 语言发出,而响应多为从数据库提取的表单。客户端与服务器可以部署在同一台设备上,即 PostgreSQL 可以在单一的计算机上使用。借由系统内部的 ‘loopback" 通信机制,数据库系统可以进行私密通讯。除非专门配置,外界是不能访问这些信息的。本位介绍三种客户端:命令行, Quantum GIS , pgAdmin 图形化数据库客户端。创造具有空间信息处理能力的数据库命令行客户端在终端模拟器(Terminal Emulator)中运行。在 Applications 菜单的 Accessories 中打开一个终端模拟器,将显示一个 Unix 风格的命令行界面。输入:psql -V回车确认,将显示 PostgreSQL 版本号。一个 PostgreSQL 服务器中,可以将不同的任务组织到不同的数据库。每个数据库独立运作,拥有专门的表单、显示、用户等。访问 PostgreSQL 数据库时将指定一个数据库。服务器上数据库列表通过以下命令查询:psql -l输出将罗列 Live 上配置的几个数据库。这里演示新建一个。PostgreSQL 使用 createdb 工具创建数据库。这里建立的数据库应带有 PostGIS 的扩展功能,因此需要指定相应的模板。这里将新建数据库称为 demo 。命令为:createdb-Ttemplate_postgisdemo现在执行 psql-l 应当可以看到 demo 数据库。也可以使用 SQL 语言创建 PostGIS 数据库。首先使用 dropdb 命令删除之前创建的数据库,然后使用 psql 命令开启 SQL 命令解析器:dropdbdemopsql-dpostgres这样就连接到了一个通用的系统数据库 postgres 。输入 SQL 命令建立新数据库:postgres=# CREATE DATABASE demo TEMPLATE=template_postgis;现在可以转换连接到新建的数据库。若重新连接时可以使用 psql-ddemo 命令。但在 psql 系统内部也可以使用以下命令:postgres=# c demo一个信息页面将显示当前已连接 demo 数据库。输入 dt 列出当前数据库内的表单,输出如下:demo=# dtListofrelationsSchema|Name|Type|Owner--------+------------------+-------+-------public|geometry_columns|table|userpublic|spatial_ref_sys|table|user(2rows)这两个表格是 PostGIS 默认的。其中 spatial_ref_sys 存储着合法的空间坐标系统。利用 SQL 查询查看:demo=# SELECT srid,auth_name,proj4text FROM spatial_ref_sys LIMIT 10;srid|auth_name|proj4text------+-----------+--------------------------------------3819|EPSG|+proj=longlat+ellps=bessel+towgs...3821|EPSG|+proj=longlat+ellps=aust_SA+no_d...3824|EPSG|+proj=longlat+ellps=GRS80+towgs8...3889|EPSG|+proj=longlat+ellps=GRS80+towgs8...3906|EPSG|+proj=longlat+ellps=bessel+no_de...4001|EPSG|+proj=longlat+ellps=airy+no_defs...4002|EPSG|+proj=longlat+a=6377340.189+b=63...4003|EPSG|+proj=longlat+ellps=aust_SA+no_d...4004|EPSG|+proj=longlat+ellps=bessel+no_de...4005|EPSG|+proj=longlat+a=6377492.018+b=63...(10rows)以上显示确认了该数据库已经建立空间操作功能。数据库中的 geometry_columns 用于记录那些表格是有空间信息的。手工建立空间数据表格空间数据库已经建立,现在可以建立具有空间信息的表格。首先建立一个常规的表格存储有关城市(cities)的信息。这个表格有两栏,一个是 ID 编号,一个是城市名:demo=# CREATE TABLE cities ( id int4, name varchar(50) );现在添加一个空间栏用于存储城市的位置。习惯上这个栏目叫做 the_geom 。它记录了数据为什么类型(点、线、面)、有几维(这里是二维)以及空间坐标系统。此处使用 EPSG:4326 坐标系统:demo=# SELECT AddGeometryColumn ("cities", "the_geom", 4326, "POINT", 2);完成后,查询 cities 表单应当显示这个新栏目。同时页面将显示当前表达没有记录(0 rows)。demo=# SELECT * from cities;id|name|the_geom----+------+----------(0rows)为添加记录,需要使用 SQL 命令。对于空间栏,使用 PostGIS 的 ST_GeomFromText 可以将文本转化为坐标与参考系号的记录:demo=# INSERT INTO cities (id, the_geom, name) VALUES (1,ST_GeomFromText("POINT(-0.1257 51.508)",4326),"London, England");demo=# INSERT INTO cities (id, the_geom, name) VALUES (2,ST_GeomFromText("POINT(-81.233 42.983)",4326),"London, Ontario");demo=# INSERT INTO cities (id, the_geom, name) VALUES (3,ST_GeomFromText("POINT(27.91162491 -33.01529)",4326),"East London,SA");当然,这样的输入方式难以操作。其它方式可以更快的输入数据。就目前来说,表格内已经有了一些城市数据,可以先进行查询等操作。简单查询标准的 SQL 操作都可以用于 PostGIS 表单:demo=# SELECT * FROM cities;id|name|the_geom----+-----------------+----------------------------------------------------1|London,England|0101000020E6100000BBB88D06F016C0BF1B2FDD2406C149402|London,Ontario|0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D45403|EastLondon,SA|0101000020E610000040AB064060E93B4059FAD005F58140C0(3rows)这里的坐标是无法阅读的 16 进制格式。要以 WKT 文本显示,使用 ST_AsText(the_geom) 或 ST_AsEwkt(the_geom) 函数。也可以使用 ST_X(the_geom) 和 ST_Y(the_geom) 显示一个维度的坐标:demo=# SELECT id, ST_AsText(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom) FROM cities;id|st_astext|st_asewkt|st_x|st_y----+------------------------------+----------------------------------------+-------------+-----------1|POINT(-0.125751.508)|SRID=4326;POINT(-0.125751.508)|-0.1257|51.5082|POINT(-81.23342.983)|SRID=4326;POINT(-81.23342.983)|-81.233|42.9833|POINT(27.91162491-33.01529)|SRID=4326;POINT(27.91162491-33.01529)|27.91162491|-33.01529(3rows)空间查询:PostGIS 为 PostgreSQL 扩展了许多空间操作功能。以上已经涉及了转换空间坐标格式的 ST_GeomFromText 。多数空间操作以 ST(spatial type)开头,在 PostGIS 文档相应章节有罗列。这里回答一个具体的问题:以米为单位并假设地球是完美椭球,上面三个城市相互的距离是多少?demo=# SELECT p1.name,p2.name,ST_Distance_Sphere(p1.the_geom,p2.the_geom) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id;name|name|st_distance_sphere-----------------+-----------------+--------------------London,Ontario|London,England|5875766.85191657EastLondon,SA|London,England|9789646.96784908EastLondon,SA|London,Ontario|13892160.9525778(3rows)输出显示了距离数据。注意 ‘WHERE" 部分防止了输出城市到自身的距离(0)或者两个城市不同排列的距离数据(London, England 到 London, Ontario 和 London, Ontario 到 London, England 的距离是一样的)。尝试取消 ‘WHERE" 并查看结果。这里采取不同的椭球参数(椭球体名、半主轴长、扁率)计算:demo=# SELECT p1.name,p2.name,ST_Distance_Spheroid(p1.the_geom,p2.the_geom,"SPHEROID["GRS_1980",6378137,298.257222]")FROMcitiesASp1,citiesASp2WHEREp1.id>p2.id;name|name|st_distance_spheroid-----------------+-----------------+----------------------London,Ontario|London,England|5892413.63776489EastLondon,SA|London,England|9756842.65711931EastLondon,SA|London,Ontario|13884149.4140698(3rows)制图以 PostGIS 数据制图需要相应的客户端支持。包括 Quantum GIS、gvSIG、uDig 在内的多种客户端均可以。以下使用 Quantum GIS:从 Desktop GIS 菜单启动 Quantum GIS 并在其 layer 菜单选择 AddPostGISlayers 。连接到 Natural Earth PostGIS 数据库的参数在 Connections 下拉菜单中有。这里可以定义和储存其它的配置。点击 Edit 可以查看具体参数。点击 Connect 连接:系统将显示所有空间信息表供选择:选择 lakes 湖泊表单并点击底部的 Add 添加。顶部的 Load 可以载入新的数据库连接配置。数据将被导入:界面上显示出湖泊的分布。QGIS 并不理解湖泊一词的含义,也许不会自动使用蓝色。请查看其手册了解如何设置。这里缩放到加拿大一处著名的湖泊群。自动创建空间数据表单OSGeo Live 的多数桌面 GIS 系统都可以将 shp 等文件导入数据库。这里依然使用 QGIS 演示。QGIS 中导入 shp 可以使用 PostGIS Manager 插件。在 Plugins 菜单选择 FetchPlugins 导入最新的官方插件列表(需要网络连接)。找到 PostGISManager 点击 Installplugin 安装。完成后,在 Plugin 菜单点击 PostGIS Manager 启动。也可以点击工具栏上大象与地球的图标。该插件将连接 Natural Earth 数据库。若提示输入密码,留空即可。在开启的界面中,选择表单可以显示相应的信息。预览(Preview)选项卡可以显示地图预览。这里选择了 populated places 图层并缩放到一个小岛:接下来使用 PostGIS Manager 将 shp 导入数据库。这里使用 R 统计扩展包含的 North Carolina sudden infant death syndrome (SIDS) 数据:在 Data 菜单选择 Loaddatafromshapefile 选项。点击 ... 选中 R maptools 中的 sids.shp 。2023-07-28 17:05:101
电脑里有个安装程序PostgreSQL,这是什么东西,有用么,能卸载么?
有用,PostgreSQL的作用为1.含LBS的应用2.作为企业数据库3.数据仓库和大数据 4.作为网站数据库或app数据库2023-07-28 17:05:181
postgreSQL数据库有什么用啊?
优点 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。 从技术角度来讲,PostgreSQL 采用的是比较经典的 C/S (client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如 ODBC,JDBC,Python,Perl ,Tcl,C/C++,ESQL 等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 缺点 从 Postgres 开始,PostgreSQL 就经受了多次变化。 首先,早期的 PostgreSQL 继承了几乎所有 Ingres, Postgres, Postgres95 的问题:过于学院味,因为首先它的目的是数据库研究,因此不论在稳定性, 性能还是使用方便方面,长期以来一直没有得到重视,直到 PostgreSQL 项目开始以后,情况才越来越好,目前,PostgreSQL 已经完全可以胜任任何中上规模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有 TB 级的数据量,已经逼近 32 位计算的极限。不过学院味也给 PostgreSQL 带来一个意想不到的好处:大概因为各大学的软硬件环境差异太大的缘故,它是目前支持平台最多的数据库管理系统的一种,所支持的平台多达十几种,包括不同的系统,不同的硬件体系。至今,它仍然保持着支持平台最多的数据库管理系统的称号。 其次,PostgreSQL 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。2023-07-28 17:05:281
PostgreSQL 就是progress吗
PostgreSQL为一个开源的数据库管理系统。它的运行程序中有postgres.exe。但是你这里多了个s,如果是多打了个s那么就是指PostgreSQL;如果不是,那么就不是PosgreSQL了。2023-07-28 17:05:361
greenplum和postgresql之间是什么关系
green plum是MPP数据库的一种,是一种分布式数据库,支持SQL和MapReduce的并行处理功能,并能以较低的成本向管理最大PB量级数据的企业提供业界领先的性能;PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。PostgreSQL可以用于C/S(客户/服务器)环境。greenplum数据库支持postgresql。2023-07-28 17:05:571
常用的sql数据库是什么
常用的sql数据库有:mysql 、SQL Server、Oracle、Sybase、DB2、PostgreSQL等。下面本篇文章就来给大家简单介绍一下这些数据库,希望对你们有所帮助。1、mysql 数据库MySQL数据库是一款开源的关系型数据库,在2009年被Oracle公司收购,但是MySQL仍然是开源的,与其他数据库相比它有着体积小、速度快、使用灵活等特点。很多中小型网站都会选择MySQL作为数据库。2、SQL Server数据库SQL Server数据库是一款功能全面的数据库,可用于中大型企业单位,它由世界第一软件供应商Microsoft公司推出,与其他数据库相比,在操作性和交互性上有着很大的优势。3、Oracle数据库Oracle数据库是被认为比较成功的一款关系型数据库,由世界第二大软件供应商Oracle公司于1983年推出。Oracle数据库具有运行稳定、功能齐全、性能优异等特点,在数据库产品中技术也比较先进,一般大型企业都会选择Oracle数据库。4、Sybase数据库Sybase是美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。5、DB2数据库DB2数据库也是一款关系型数据库,它是IBM的当家产品,它的功能也能够满足中大型公司的需求,也可以用于中小型电子商务系统。据统计DB2的用户已经超过6000万之多。6、PostgreSQL数据库PostgreSQL数据库是一款最具特色的开源数据库,它有着最全的数据类型,支持事务、子查询、多版本并行控制系统等特性。2023-07-28 17:06:061
请问一下PostgreSQL什么意思 请详述 谢谢
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。数据来源于百度百科,你可以在百度百科里面看想尽资料2023-07-28 17:06:141
PostgreSQL最大的优势是什么?
PostgreSQL最大的优势主要是两个方面:1)PostgreSQL的开源开放性:因为我们是开源的,变拥有了动态的社区、增长非常快的社区,新功能总是不断出现。不仅可靠性很高,性能也很高。2)PostgreSQL的可扩展性:在1986年的时候,它便已经被设计为可扩展的。可以向数据库添加语言 可以添加数据类型 可以添加索引方法、操作符 、类型转换、聚合;支持GIS、Json、全文搜索、范围类型、XML。Postgres的独特之处在于它同时执行关系和非关系操作。现在我们从很多不同的地方获取数据,关系系统必须具有灵活性,必须能够处理复杂的数据,而Postgres是唯一真正能够做到这一点的数据库。2023-07-28 17:06:281
为什么选择PostgreSQL而不是MySQL
具体看你的需求啊2023-07-28 17:06:373
MySQL与PostgreSQL比较 哪个数据库更好
特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。 通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。 数据库 数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。 数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。 数据缓冲区 通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置 postgresql.conf 文件中的 shared_buffers 参数来更新缓冲区缓存。 数据库连接 客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 身份验证 MySQL 在数据库级管理身份验证。 基本只支持密码认证。 PostgreSQL 支持丰富的认证方法:信任认证、口令认证、Kerberos 认证、基于 Ident 的认证、LDAP 认证、PAM 认证 加密 可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络加密。 可以使用 pgcrypto 库中的函数对列进行加密/解密。可以通过 SSL 连接实现网络加密。 审计 可以对 querylog 执行 grep。 可以在表上使用 PL/pgSQL 触发器来进行审计。 查询解释 使用 EXPLAIN 命令查看查询的解释计划。 使用 EXPLAIN 命令查看查询的解释计划。 备份、恢复和日志 InnoDB 使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。需要第三方软件才能支持热备份。 在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。 可以支持热备份。 JDBC 驱动程序 可以从 参考资料 下载 JDBC 驱动程序。 可以从 参考资料 下载 JDBC 驱动程序。 表类型 取决于存储引擎。例如,NDB 存储引擎支持分区表,内存引擎支持内存表。 支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 由于PostgreSQL的表分区是通过表继承和规则系统完成了,所以可以实现更复杂的分区方式。 索引类型 取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-树、哈希、R-树和 Gist 索引。 约束 支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 支持主键、外键、惟一、非空和检查约束。 存储过程和用户定义函数 支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。 没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 编写。 触发器 支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。 系统配置文件 my.conf Postgresql.conf 数据库配置 my.conf Postgresql.conf 客户机连接文件 my.conf pg_hba.conf XML 支持 有限的 XML 支持。 有限的 XML 支持。 数据访问和管理服务器 OPTIMIZE TABLE —— 回收未使用的空间并消除数据文件的碎片myisamchk -analyze —— 更新查询优化器所使用的统计数据(MyISAM 存储引擎)mysql —— 命令行工具MySQL Administrator —— 客户机 GUI 工具 Vacuum —— 回收未使用的空间Analyze —— 更新查询优化器所使用的统计数据psql —— 命令行工具pgAdmin —— 客户机 GUI 工具 并发控制 支持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。 支持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed(默认 —— 能看到查询启动时数据库的快照)和 Serialization(与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。 MySQL相对于PostgreSQL的劣势:MySQL PostgreSQL最重要的引擎InnoDB很早就由Oracle公司控制。目前整个MySQL数据库都由Oracle控制。 BSD协议,没有被大公司垄断。对复杂查询的处理较弱,查询优化器不够成熟 很强大的查询优化器,支持很复杂的查询处理。只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。 都支持性能优化工具与度量信息不足 提供了一些性能视图,可以方便的看到发生在一个表和索引上的select、delete、update、insert统计信息,也可以看到cache命中率。网上有一个开源的pgstatspack工具。InnoDB的表和索引都是按相同的方式存储。也就是说表都是索引组织表。这一般要求主键不能太长而且插入时的主键最好是按顺序递增,否则对性能有很大影响。不存在这个问题。大部分查询只能使用表上的单一索引;在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢。不存在这个问题表增加列,基本上是重建表和索引,会花很长时间。表增加列,只是在数据字典中增加表定义,不会重建表存储过程与触发器的功能有限。可用来编写存储过程、触发器、计划事件以及存储函数的语言功能较弱除支持pl/pgsql写存储过程,还支持perl、python、Tcl类型的存储过程:pl/perl,pl/python,pl/tcl。也支持用C语言写存储过程。不支持Sequence。支持不支持函数索引,只能在创建基于具体列的索引。不支持物化视图。支持函数索引,同时还支持部分数据索引,通过规则系统可以实现物化视图的功能。执行计划并不是全局共享的, 仅仅在连接内部是共享的。执行计划共享MySQL支持的SQL语法(ANSI SQL标准)的很小一部分。不支持递归查询、通用表表达式(Oracle的with 语句)或者窗口函数(分析函数)。都 支持不支持用户自定义类型或域(domain)支持。对于时间、日期、间隔等时间类型没有秒以下级别的存储类型可以精确到秒以下。身份验证功能是完全内置的,不支持操作系统认证、PAM认证,不支持LDAP以及其它类似的外部身份验证功能。支持OS认证、Kerberos 认证 、Ident 的认证、LDAP 认证、PAM 认证不支持database link。有一种叫做Federated的存储引擎可以作为一个中转将查询语句传递到远程服务器的一个表上,不过,它功能很粗糙并且漏洞很多有dblink,同时还有一个dbi-link的东西,可以连接到oracle和mysql上。Mysql Cluster可能与你的想象有较大差异。开源的cluster软件较少。复制(Replication)功能是异步的,并且有很大的局限性.例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master.有丰富的开源cluster软件支持。explain看执行计划的结果简单。explain返回丰富的信息。类似于ALTER TABLE或CREATE TABLE一类的操作都是非事务性的.它们会提交未提交的事务,并且不能回滚也不能做灾难恢复DDL也是有事务的。PostgreSQL主要优势: 1. PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。 2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。 3. PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发的。 4. PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。 目前只想到这些,以后想到再添加,欢迎大家拍砖。PostgreSQL与oracle或InnoDB的多版本实现的差别PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引本身没有分开。 PostgreSQL的主要优势在于: 1. PostgreSQL没有回滚段,而oracle与innodb有回滚段,oracle与Innodb都有回滚段。对于oracle与Innodb来说,回滚段是非常重要的,回滚段损坏,会导致数据丢失,甚至数据库无法启动的严重问题。另由于PostgreSQL没有回滚段,旧数据都是记录在原先的文件中,所以当数据库异常crash后,恢复时,不会象oracle与Innodb数据库那样进行那么复杂的恢复,因为oracle与Innodb恢复时同步需要redo和undo。所以PostgreSQL数据库在出现异常crash后,数据库起不来的几率要比oracle和mysql小一些。 2. 由于旧的数据是直接记录在数据文件中,而不是回滚段中,所以不会象oracle那样经常报ora-01555错误。 3. 回滚可以很快完成,因为回滚并不删除数据,而oracle与Innodb,回滚时很复杂,在事务回滚时必须清理该事务所进行的修改,插入的记录要删除,更新的记录要更新回来(见row_undo函数),同时回滚的过程也会再次产生大量的redo日志。 4. WAL日志要比oracle和Innodb简单,对于oracle不仅需要记录数据文件的变化,还要记录回滚段的变化。 PostgreSQL的多版本的主要劣势在于: 1、最新版本和历史版本不分离存储,导致清理老旧版本需要作更多的扫描,代价比较大,但一般的数据库都有高峰期,如果我们合理安排VACUUM,这也不是很大的问题,而且在PostgreSQL9.0中VACUUM进一步被加强了。 2、由于索引中完全没有版本信息,不能实现Coverage index scan,即查询只扫描索引,直接从索引中返回所需的属性,还需要访问表。而oracle与Innodb则可以;进程模式与线程模式的对比PostgreSQL和oracle是进程模式,MySQL是线程模式。进程模式对多CPU利用率比较高。进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。线程模式对资源消耗比较少。所以MySQL能支持远比oracle多的更多的连接。对于PostgreSQL的来说,如果不使用连接池软件,也存在这个问题,但PostgreSQL中有优秀的连接池软件软件,如pgbouncer和pgpool,所以通过连接池也可以支持很多的连接。堆表与索引组织表的的对比Oracle支持堆表,也支持索引组织表PostgreSQL只支持堆表,不支持索引组织表Innodb只支持索引组织表索引组织表的优势:表内的数据就是按索引的方式组织,数据是有序的,如果数据都是按主键来访问,那么访问数据比较快。而堆表,按主键访问数据时,是需要先按主键索引找到数据的物理位置。索引组织表的劣势:索引组织表中上再加其它的索引时,其它的索引记录的数据位置不再是物理位置,而是主键值,所以对于索引组织表来说,主键的值不能太大,否则占用的空间比较大。对于索引组织表来说,如果每次在中间插入数据,可能会导致索引分裂,索引分裂会大大降低插入的性能。所以对于使用innodb来说,我们一般最好让主键是一个无意义的序列,这样插入每次都发生在最后,以避免这个问题。由于索引组织表是按一个索引树,一般它访问数据块必须按数据块之间的关系进行访问,而不是按物理块的访问数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个问题。 PostgreSQL9.0中的特色功能: PostgreSQL中的Hot Standby功能 也就是standby在应用日志同步时,还可以提供只读服务,这对做读写分离很有用。这个功能是oracle11g才有的功能。 PostgreSQL异步提交(Asynchronous Commit)的功能: 这个功能oracle中也是到oracle11g R2才有的功能。因为在很多应用场景中,当宕机时是允许丢失少量数据的,这个功能在这样的场景中就特别合适。在PostgreSQL9.0中把synchronous_commit设置为false就打开了这个功能。需要注意的是,虽然设置为了异步提交,当主机宕机时,PostgreSQL只会丢失少量数据,异步提交并不会导致数据损坏而数据库起不来的情况。MySQL中没有听说过有这个功能。 PostgreSQL中索引的特色功能: PostgreSQL中可以有部分索引,也就是只能表中的部分数据做索引,create index 可以带where 条件。同时PostgreSQL中的索引可以反向扫描,所以在PostgreSQL中可以不必建专门的降序索引了。2023-07-28 17:06:471
对比其他数据库软件,postgresql有什么优势
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。2023-07-28 17:06:571
postgresql的开发语言是什么
楼上正解!+12023-07-28 17:07:073
SQLite,MySQL和PostgreSQL 三种关系数据库哪个好
SQLite,MySQL和PostgreSQL 三种关系数据库哪个好这三个具体都有各自的有点和缺点,哪个好需要看使用在什么地方1、什么时候要用 SQLitea)、嵌入式应用 所有需要迁移性,不需要扩展的应用,例如,单用户的本地应用,移动应用和游戏b)、代替磁盘访问 在很多情况下,需要频繁直接读/写磁盘文件的应用,都很适合转为使用 SQLite ,可以得益于 SQLite 使用 SQL 带来的功能性和简洁性c)、测试 它能秒杀大部分专门针对应用业务逻辑(也就是应用的主要目的:能完成功能)的测试2、什么时候不要用SQLitea)、多用户应用 如果你在开发的应用需要被多用户访问,而且这些用户都用同一个数据库,那么相比 SQLite 最好还是选择一个功能完整的关系型数据库(例如 MySQL)b)、需要大面积写入数据的应用 SQLite 的缺陷之一是它的写入操作。这个数据库同一时间只允许一个写操作,因此吞吐量有限 3、何时使用 MySQL?a)、分布式操作 当你需要的比SQLite可以提供的更多时,把MySQL包括进你的部署栈,就像任何一个独立的数据库服务器,会带来大量的操作自由和一些先进的功能b)、高安全性 MySQL的安全功能,用一种简单的方式为数据访问(和使用)提供了可靠的保护c)、Web网站 和 Web应用 绝大多数的网站(和Web应用程序)可以忽视约束性地简单工作在MySQL上。这种灵活的和可扩展的工具是易于使用和易于管理的——这被证明非常有助于长期运行d)、定制解决方案 如果你工作在一个高度量身定制的解决方案上,MySQL能够很容易地尾随和执行你的规则,这要感谢其丰富的配置设置和操作模式 4、何时不用 MySQL?a)、SQL 服从性 因为 MySQL 没有[想要]实现 SQL 的全部标准,所以这个工具不完全符合SQL。如果你需要对这样的关系数据库管理系统进行整合,从MySQL进行切换是不容易的b)、并发 即使MySQL和一些存储引擎能够真地很好执行读取操作,但并发读写还是有问题的c)、缺乏特色 再次提及,根据数据库引擎的选择标准,MySQL会缺乏一定的特性,如全文搜索5、何时使用PostgreSQL?a)、数据完整性 当可靠性和数据完整性是绝对必要而无需理由时,PostgreSQL是更好的选择b)、复杂的自定义过程 如果你需要你的数据库执行自定义过程,可扩展的PostgreSQL是更好的选择c)、整合 在将来,如果可能要把整个数据库系统迁移到另一个适当的解决方案(例如Oracle)中,PostgreSQL对于这种切换将是最兼容和易于操作的d)、复杂的设计 相比其他的开源和免费的 RDBMS(关系数据库管理系统)实现来说,对于复杂的数据库设计,PostgreSQL提供了大部分的功能和可能性,同时并没放弃其他有价值的地方6、何时不用 PostgreSQL?a)、速度 如果你需要的只是快速的读取操作, PostgreSQL 不是为此而准备的工具b)、简化体制 除非你需要绝对的数据完整性,原子性,一致性,隔离性,耐久性,或复杂的设计,PostgreSQL 对简化体制来说是杀手c)、复制 除非你愿意花不少时间,精力和资源,否则对于那些缺乏数据库和系统管理经验的人来说,实现与MySQL的(主从)复制可能不容易2023-07-28 17:07:261
PostgreSQL 中 %TYPE是什么意思,如何使用
与Oracle中类似,%TYPE是用来获取一个已定义变量的类型的。这样可以方便的定义出于已有变量或字段同类型的变量。例如:do language plpgsql $$declare v1 character varying(100); -- 定义变量v1类型为变长字串declare v2 v1%type; -- 定义变量v2与v1同类型,即变长字串beginv2 := "Hello World!"; -- 给v2变量赋值raise notice "%", v2; -- 显示出v2的内容end $$;2023-07-28 17:07:331
postgreSql数据库的sql脚本中,为什么用connect XXX;开头,意义是什么?
connect 后面依次跟 数据库名 角色名 主机地址 端口号 用于在postgresql服务客户端连接另一个唯一确定的postgresql数据库,其中数据库名为必填2023-07-28 17:07:431
为什么 PostgreSQL 没有 MySQL 流行
跟mysql的历史有关系,mysql在2008年卖给了sun公司,并一直可以免费的供大家伙使用。但是10年sun被oracle收购,oracle是一个以出售数据库起家的公司,收购sun后,虽然一直支持mysql的免费策略。但是保不齐那天就不免费了。PostgreSQL数据库没有太多版本的选择,并且这个数据库的最优势产品时对事务的支持。可能市面上的大多数软件对事务的要求没那么强烈。导致mysql使用人员更多。PostgreSQL数据库是mysql被oralce收购后逐渐流行起来的开源数据库。虽然他的历史比mysql更悠久。但是现在大多数公司使用开源项目的做的软件产品。培养了大量的使用mysql熟悉的程序员。也就导致了现在还是会有大量的mysql使用者。公司在做产品时肯定会考虑到自己公司对数据库产品的熟悉程度来决定使用什么样的数据库。但是现在PostgreSQL已经开始慢慢的要苏醒了。2023-07-28 17:07:511
PostgreSQL 数据库 有没有实例名? 如果有实例名是什么,知道的奉献下。不要乱答谢谢
你自己安装一个PostgreSQL 不就得了,连接路径:IP:端口:初始库名这是我用Navicat可视化工具的连接信息截图2023-07-28 17:08:181
关于请问安装MySQL和PostgreSQL对硬件的最低要求是什么
PostgreSQL是一个数据库,120G代表postgreSQL保存的数据占的空间有120G,如果没用到可以直接删除,对系统没影响。2023-07-28 17:08:311
windoes下postgreSQL 第一次打开需要的口令是什么
这是因为postgres默认不是用内置的超级管理员用户"postgres"登陆的,你设置的密码是超级管理员"postgres"的密码,你可以用"psql --help"(此命令是双短线)命令查看数据库登陆的默认用户名,我的是"admin"用户,这个默认用户是可以修改的,我知道的修改方式是增加环境变量"PGUSER",内容就是"postgres",(注:没有双引号),然后直接输入psql就能以默认postgres用户登陆了.当然,你也可以直接用psql -h postgres服务器ip -U postgres,指定用postgres用户登陆,本机就是psql -h 127.0.0.1 -U postgres,然后会有口令让你输入postgres用户的密码.先使用帮助命令,psql --help确定执行后的输出效果此时尝试直接使用psql命令并输入超级管理员的密码会提示默认用户认证失败修改环境变量,添加PGUSER,值为postgre并确定应用继续使用帮助命令查看默认用户,psql --help,如果没有更改,可能是环境便令设置错误,或者是环境变量没有生效,耐心等待或者重启电脑都可以使环境变量生效如果使用帮助命令查看默认用户是你需要使用的用户,直接使用psql命令并输入对应的密码,此时就能登陆了接下来操作你想操作的吧,2023-07-28 17:08:501
二、什么是数据库
一、数据库服务1.什么是数据库DB,DataBase 数据库:依照某种数据模型进行组织并存放到存储器的数据集合DBMS,DataBase Management System 数据库管理系统:用来操纵和管理数据库的大型服务软件DBS,DataBase System 数据库系统:即DB+DBMS,指带有数据库并整合了数据库管理软件的计算机系统它是专门用来存储数据,常用的生产环境包括: 银行 金融 购物网站、论坛等。 2.搭建数据服务器: 硬件、OS、应用软件3.常见的数据服务厂商及软件: Oracle: Oracle Database 、MySql Microsoft: SQL Server 、access IBM: DB2 Sybase: Sybase 加州大学伯克利分校: postgreSQL其中,按照类别分类如下:商业软件: oracle SQL SERVERDB2 Sybase access 开源软件: postgreSQL MySQL 跨平台 : oracle DB2Sybase postgreSQL MySQL 不跨平台: SQL SERVER access 即开源又跨平台: postgreSQL MySQL4. MySQL简介MySQL已经成为世界上最爱欢迎的数据库管理系统之一。无论是用在小型开发项目上,还是用来构建那些声明显赫的网站,MySQL都证明了自己的稳定、可靠、快速、可信的系统,足以胜任任何数据存储业务的需要。-----------------------------------------------------------------------------------------------------------------二、安装及使用MySQL1.安装yum -y install mysql-server mysql service mysqld start或rpm -q mysql-server mysql mysql-develrpm -e --nodeps mysql-server mysql mysql-develmv /etc/my.cnf /etc/my.cnf.baktar -xvf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tarrpm -Uvh MySQL-*.rpmrpm -qa | grep -i --color mysqlservice mysql start|stop|statusfind / -name "my.cnf" cp /usr/share/mysql/my-default.cnf /etc/my.cnf2.服务常识端口号:3306 进程名:mysqld 进程所有者:mysql 数据传输协议:tcp主配置文件 /etc/my.cnf数据库目录 /var/lib/mysql/ SQL 结构化查询语言 每条SQL语句要以; 结尾 命令不区分字母大写 C 终止SQL语句的执行 G 换行显示数据srvice mysql start ------------------------------------------------------------本文出自 “刘福” 博客,请务必保留此出处http://liufu1103.blog.51cto.com/9120722/1656825二、什么是数据库标签:什么是数据库2023-07-28 17:09:531
Oracle存储过程改写为PostgreSql的存储过程
PostgreSQL中只有function (没有create procedure的语句,都用create function来做)。具体的区别来说,首先就是语法稍有不同: Oracle为P/L SQL的语法,PostgreSQL为PLPGSQL;然后是一些类型处理的不同。可以把Oracle的存储过程贴出来看看。2023-07-28 17:10:021
怎么在shell里操作postgresql数据库呢?或者实现方法是什么呢?
在root用户下,su -l postgres -s /bin/bash -c "psql -h xxxx -U dbuser -p port -d dbname -c "UPDATE config SET value ="500" where id=312;""2023-07-28 17:10:152
控制面板中有psqlODBC-64x是什么软件
如果是不同时换那就是修理的问题2023-07-28 17:10:253
为什么PostgreSQL比MongoDB还快
1)数据加载 从服务端资源消耗的角度看,是MongoDB的性能是PostgreSQL的2倍。但是如果数据加载不能很好的并发展开,让mongoimport成为了瓶颈,那应该算打平。 另外,EnterpriseDB的数据加载的测试结果和我的结果差异比较大,可能是因为EnterpriseDB的测试中,数据量超过了系统内存量,IO对测试结果的影响开始显现。2)数据插入 从服务端资源消耗的角度看,两者其实相差不大。EnterpriseDB的测试结果被mongo客户端的性能瓶颈绑架了。3)数据查询 对无匹配数据(或少量匹配数据)的索引查询,PostgreSQL的性能是MongoDB的4倍(这一点也有点令人不解,同样是走索引的单点查询,为什么差距就这么大呢?)。 虽然EnterpriseDB的测试结果也表明PostgreSQL的性能是MongoDB 4倍左右,但EnterpriseDB的测试方法是有问题的。4)数据大小 MongoDB的数据大小大约是PostgreSQL的3倍,这和EnterpriseDB的测试结果是一致的。PostgreSQL在NoSQL方面的表现确实抢眼。PostgreSQL不仅是SQL+NoSQL+ACID的完美组合,性能还比MongoDB技高一筹(分布式集群上MongoDB更有优势)。2023-07-28 17:10:321
postgresql安装的PASSWORD是什么啊?
下载时有说明的2023-07-28 17:10:402
为什么我从MongoDB迁移到PostgreSQL
我的第一个以 MongoDB 作为主数据库开发的网站是 codecampo.com(2011 年),第二个是 writings.io(2013 年)。Campo 在第 3 版的时候重写(2014 年)迁移到 PostgreSQL,而 writings.io 已经关闭了,现在正在做的创业项目 selfstore.io 也是使用 PostgreSQ 我的第一个以 MongoDB 作为主数据库开发的网站是 codecampo.com(2011 年),第二个是 writings.io(2013 年)。Campo 在第 3 版的时候重写(2014 年)迁移到 PostgreSQL,而 writings.io 已经关闭了,现在正在做的创业项目 selfstore.io 也是使用 PostgreSQL。PostgreSQL 已经成为我的默认数据库,鉴于我曾经做过一段时间 MongoDB 布道者,所以我想有必要总结一下。我开发维护的都是流量很小的网站,所以不用期待我分享千万级数据管理的经验(我以前正式工作中倒是接触一个千万级使用 MySQL 的网站,但优化工作不是我做的)。我也不会犯一些低级错误,例如项目开发到一半才困惑“MongoDB 没有 JOIN 查询怎么办?”,选型时已经知道将要面临怎样思维转换。我不希望这篇文章被当作是“XX 已死,YY 永生”一类的噱头文章,这类文章大多带有偏见,并且对评论对象浅尝辄止。不同的工具有不同的应用场合,不能一概而论。我从 MySQL 转向 MongoDB,以及从 MongoDB 转向 PostgreSQL 的最大原因都是:有趣。Web 开发一个优点就是你不用限定在某个平台某类技术上,最终用户看到的都是 HTML 页面。下面是一些我选择数据库的经验。MongoDB 优点无模式无模式是个双面刃。好的方面,它可以减少表的空余字段,减少拆表的必要,例如用户集合可以一条记录带有 admin: true 属性,其他不带有这个属性,而在关系数据库中这类带来大量空余字段的属性最好拆表。PostgreSQL 打开 HStore 扩展后也可以实现这样的结构。如果觉得 admin: true 的例子太简单,可以考虑下怎么储存 gemspec 的内容并让它可索引。无模式另一个好处是让代码逻辑管理起来更清晰,可以把属性定义和模型逻辑放在一起:class Artist include Mongoid::Document field :name, type: Stringend类似 DataMapper 的库虽然也能实现这样的语法,但始终需要维护一个迁移脚本,需要重复自己。用 Mongoid 的时候我一直觉得打开 Model 文件先看到属性定义很舒服。无模式的最大坏处就是无法真正掌握数据库中有什么内容,实际上并不是经常需要储存无模式数据,多数是模式化数据。所以即使不需要管理模式迁移,还是要管理数据迁移,每次更改属性相关逻辑时要写数据迁移脚本。这里无模式是好是坏取决于应用场景。数据类型MongoDB 支持的数据类型多于 MySQL,其中最主要是 Array,Hash 类型。PostgreSQL 原生或通过扩展可以支持 Array 和 Hash,但是配套的操作不够 MongoDB 简便。例如 MongoDB 对 Array 有一个 $addToSet 方法,只有数组不存在某元素时进行插入:update( $addToSet: { upvotes_ids: 1 } )而 PostgreSQL 要进行同样操作需要组合一些语句:SET upvotes_ids = array_append(upvotes_ids ,1) WHERE NOT (upvotes_ids @>array[1])MongoDB 的语句更简洁,也不排除 PostgreSQL 以后也会添加同样的方法。MongoDB 缺点不支持事务也许需不需要数据库事务成了是否选择 MongoDB 的决定性因素,MongoDB 不支持数据库事务。有很多应用对数据一致性其实要求不高,例如很多社交应用,大多数应用逻辑只是简单存取(发一段文字,上传一张照片),极少的不一致是不影响应用的。而一些严肃应用,例如交易系统,就很需要数据库事务的支持了,否则就需要在应用层自己实现一个粗糙的、充满 Bug 的事务支持。如果有兴趣自己实现事务操作,可以看 MongoDB 的文章 Perform Two Phase Commits。如果有跨系统的事务操作,就不能完全依赖数据库事务,还要有应用层的重试或回滚操作(例如远程调用支付接口)。数据库层面支持事务的话,起码让维护系统内部数据一致性更轻松。查询语法MongoDB 的原生查询语法是 JavaScript,JavaScript 程序员可能对此欣喜若狂。我最初感觉也是很新鲜,但久了就觉得很烦躁。JavaScript 太多的括号和花括号,在组合多个查询条件的时候作括号匹配很费神。SQL 是一个查询 DSL,虽然看起来有点古老,但是在查询这个特定领域上做得很好。如果应用使用 ORM,可能很多时候不需要写原生查询语句。除了 PHP 社区外,其他社区也不推荐写原生查询。不过少数情况下,复杂查询还是原生语句更高效,而且数据库终端也是调试查询错误的最终手段,所以查询语法至少不能让人难受。默认不安全MongoDB 的开发者假设你是一个资深系统管理员,并且把 MongoDB 部署在安全的内部网络当中,所以他们官方安装包内含的配置没有设置任何安全验证,接收任何来源的访问,结果就是一些初级系统管理员(例如我)把 MongoDB 直接暴露到了公网,造成数据泄漏。这不仅是 MongoDB 的问题,Redis、Elasticsearch 也是这样,姑且把这认为是一种设计“哲学”。Ubuntu 的软件源管理者不认同这个“哲学”,从软件源安装的 MongoDB 的默认只接受本地连接,这保护了一些初级系统管理员,但如果追新使用数据库开发方的安装包就会中招。顺便一提,PostgreSQL 默认配置只接受本地连接。无论用什么数据库都好,使用前一定要完整读一遍文档,特别是设置和安全相关的章节,同时设置系统防火墙。库MongoDB 的官方驱动更新没有问题,不过一般不会直接使用驱动写程序(写过,很繁琐),而是使用 ODM(对象-文档映射)工具,在 Ruby 中就是 Mongoid。Mongoid 已经做得很好,提供了类似 ActiveRecord 的 API,并且很好的利用了 MongoDB 的特性,但在关注度和社区规模上还不及 ActiveRecord。ActiveRecord 作为 Rails 的默认组件,每次都是跟随 Rails 的更新同时更新的,Mongoid 则要滞后一段时间。所以如果你希望紧跟 Rails 的更新,那么最好使用 ActiveRecord 和关系数据库。为什么是 PostgreSQL 而不是 MySQL/MariaDB今年开始,我的精力投入到一个交易网站的开发,所以一开始就打算迁移到关系数据库。至于为什么用 PostgreSQL 而不是 MySQL/MariaDB,有几个理由:有趣,我还没用过 PostgreSQL。PostgreSQL 的数据类型更多,我主要需要 Array 和 HStore。这些数据类型可以减少开发量,在 MySQL 实现 Tag 属性需要多两张表。过去的工作中让我接触到 MySQL 不好的一面,例如因为 JOIN 性能不好(我没验证过),不允许用 includes 方法,基本上只做主键查询,所以我之前那么容易接受 MongoDB。MySQL 被 Oracle 收购后社区出现分裂(MariaDB),我对 Oracle 印象也不好,前公司旗下一个网站因为域名带有 Java 而收到律师函,所以我尽可能避开 Oracle 的产品。PostgreSQL 的社区热度在增加,ActiveRecord 对其特性的支持也在完善。基于以上理由,我选择了 PostgreSQL,目前为止工作得很好。总结这几年间我接触了 3 个数据库(不包括 Redis 的话),SQL-NoSQL-SQL 的切换让我对数据库有了更深刻的理解,也认识到还有很多类型数据库我没试过,关系数据库不是唯一选择。我的几个项目都是只是玩具规模,没什么说服力,但以免被误解,还是提几条建议:如果当前数据库用得很好,就没必要更换。如果没有明确的数据库需求,那么用关系数据库。如果要开发新的项目,推荐 PostgreSQL。最终,选择要取决于你的应用场景。 原文地址:为什么我从 MongoDB 迁移到 PostgreSQL, 感谢原作者分享。2023-07-28 17:10:521
无任何数据库基础,PostgreSQL数据库难学吗?
其实重要的是你的信心和毅力!教程和资料到网上搜索一下很多的,祝你好运!2023-07-28 17:11:023
postgresql 和postgis区别是什么?
postgresql是DBMS,是用来存储并管理数据的。而Postgis是DBMS的扩展插件,是让postgresql这个DBMS具有了地理信息系统特有的数据模式与存储过程函数,希望对你有帮助!2023-07-28 17:11:222
postgresql 和postgis区别是什么?
PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一, 有着非常广泛的用户。PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。可以说PostGIS是对象-关系型数据库系统PostgreSQL的一个扩展,具有管理空间数据库的能力。如果不明白可以继续提问。望采纳2023-07-28 17:11:322
greenplum和postgresql之间是什么关系
GreenPlum采取的是PostgreSql框架,是PostgreSql系的重要应用。从这个角度上可以知道GreenPlum是关系型数据库。2023-07-28 17:11:401
greenplum和postgresql之间是什么关系
greenplum底层技术就是postgresql,sql语法和其他一些操作都符合postgresql;2023-07-28 17:11:481
postgresql的语法与mysql有什么区别
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。六、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL(听李元佳说过,但是没有验证过)。七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)最后说一下我感觉 PG 不如 MySQL 的地方。第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,第三点,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.第五点,对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。另外一些:pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。很多pg应用也是24/7的应用,比如skype. 最近几个版本VACUUM基本不影响PGSQL 运行,8.0之后的PGSQL不需要cygwin就可以在windows上运行。至于说对于事务的支持,mysql和pgsql都没有问题。2023-07-28 17:11:581
对比其他数据库软件,postgresql有什么优势
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。2023-07-28 17:12:071
为什么MySQL用户那么多,而同样优秀的PostgreSQL却很少人用
MySQL之所以仍然如此流行是因为每个Linux Web托管软件包中都包含它。但随着Oracle将其收购,MySQL的开源程度大不如前。而PostgreSQL不仅发展更快,还加入了JSON支持,成为少数几个支持NoSQL的关系型数据库之一。MySQL/MariaDB的当前版本是5.7.6(MariaDB为MySQL创建者Monty Widenius创建的一个MySQL分支),PostgreSQL的版本是9.4.1。PostgreSQL最近增加了JSON支持,与传统的关系型数据库相比,它提供了更大的数据存储灵活性,因此,这方面PostgreSQL胜过MySQL。PostgreSQL采用类似MIT的许可协议,允许开发人员做任何事情,包括在开源或闭源产品中商用,而MySQL的客户端遵循GPL许可协议,所以开发人员必须向Oracle付费或者将自己的应用程序开源。MySQL提供了插件程序API,支持C/C++或任何兼容C的语言,而且从5.7.3版本开始支持全文搜索,PostgreSQL有一个类似的系统但支持的语言更多,包括C/C++、Java、.Net、Perl、 Python、Ruby、Tcl、ODBC等,它甚至可以在单独的进程中运行用户提供的代码;除了所有关系型数据库都包含的有关数据库、表和列的一般信息外,PostgreSQL系统目录中还可以包含关于数据类型、函数和存取方法的信息,开发人员可以通过修改这些信息实现扩展。2023-07-28 17:12:161
讨论PostgreSQL 和其他数据库的差异在哪里
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。2023-07-28 17:12:251
postgreSQL sql语句中的~~符号是什么意思
能把语句打出来看一下吗?我记得语法中根本就没有这个符号的意义2023-07-28 17:12:333
postgresql,判断字段是否为空,空给默认值,否则取该字段是什么函数?
select COALESCE(D.wk_ptn_cd, "00") as wk_ptn_cd简介:PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。架构:PostgreSQL强壮的一个原因源于它的架构。和商业数据库一样,PostgreSQL可以用于C/S(客户/服务器)环境。这对于用户和开发人员有很多好处。PostgreSQL安装核心是数据库服务端进程。它允许在一个独立服务器上。需要访问存储在数据库中的数据的应用程序必须通过数据库进程。这些客户端程序无法直接访问数据,即使它们和服务程序在同一台机器上。2023-07-28 17:12:421
postgreSQL数据库里导入导出的sql语句是什么?
Postgresql数据的导入和导出,以及copy命令介绍如何导出PostgreSQL数据库中的数据:pg_dump -U postgres -f dump.sql mydatabase具体某个表pg_dump -U postgres -t mytable -f dump.sql mydatabase导入数据时首先创建数据库再用psql导入:createdb newdatabasepsql -d newdatabase -U postgres -f dump.sql把数据按照自己所想的方式导出,强大的copy命令:echo "copy students to? stdout DELIMITER "|""|psql school|head(students为表名,school为库名,各个字段以|分隔)echo "copy (select * from students order by age limit 10) to stdout;" | psql school2023-07-28 17:13:031
PostgreSQL 动态SQL语句怎么写
哈哈,终于找到一个使用一样数据库的了2023-07-28 17:13:142
如何卸载postgreSQL
这里针对的是 9.3 版本。如是其他版下面的仅供参考。 1、如果是postgresql.app的形式,这个简单,跟其他app一样,删除app即可。 2、如果是使用installer图形界面方式安装的。则需要打开终端命令行。 3、执行 open /Library/PostgreSQL/9.2/unins...2023-07-28 17:13:221
如何使用 PostgreSQL 数据库去 O
如何使用 PostgreSQL 数据库去 O1、安装postgresqlyum install postgresql postgresql-servermysql占用端口3306 pgsql是54322、导入整个数据库psql -U postgres(用户名) 数据库名(缺省时同用户名) < /data/dum.sql3、导出整个数据库pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名) >/data/dum.sql4、导出某个表pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名) -t table(表名) >/data/dum.sql5、压缩方法一般用dump导出数据会比较大,推荐使用xz压缩压缩方法 xz dum.sql 会生成 dum.sql.xz 的文件6、xz压缩数据倒数数据库方法xzcat /data/dum.sql.xz | psql -h localhost -U postgres(用户名) 数据库名(缺省时同用户名)2023-07-28 17:13:291
如何配置来完成PostgreSQL数据库远程连接
安装PostgreSQL数据库之后,默认是只接受本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相 应的配置。配置远程连接PostgreSQL数据库的步骤很简单,只需要修改data目录下的pg_hba.conf和postgresql.conf, 其中pg_hba.conf是用来配置对数据库的访问权限,postgresql.conf文件用来配置PostgreSQL数据库服务器的相应的参数。 下面介绍配置的步骤: 1.修改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 trust host all all 192.168.1.0/24 md5 # IPv6 local connections: host all all ::1/128 trust 其中红色标识的内容为新添加的内容,表示允许网段192.168.1.0上的所有主机使用所有合法的数据库用户名访问数据库,并提供加密的密码验 证。在我们的环境中,我们需要在主机192.168.1.5上使用postgres用户访问192.168.1.9上的PostgreSQL数据库。 2.修改postgresql.conf文件,将数据库服务器的监听模式修改为监听所有主机发出的连接请求。 定位到#listen_addresses="localhost"。PostgreSQL安装完成后,默认是只接受来在本机localhost的连接请 求,通过将改行内容修改为listen_addresses="*"来允许数据库服务器监听来自任何主机的连接请求: listen_addresses = "*" # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to "localhost", "*" = all # (change requires restart) 修改之后,保存并退出,然后重起数据库,就可以在在远程机器上访问PostgreSQL数据库了。 另外,数据库管理小贴士: matrix数据库使用的是PostgreSQL数据库。你可以安装一个类似phpmyadmin的管理2023-07-28 17:13:371
postgresql怎么查看数据库参数设置
通过参数文件查看,一般是在$PGDATA/postgresql.conf文件里或者在系统中查看,如postgres=# show shared_buffers;shared_buffers ----------------4GB(1 row)--查看所有参数postgres=# show all;2023-07-28 17:13:471
ubuntu下安装 postgresql 的命令
sudo apt-get install postgresql2023-07-28 17:13:563
c/c++连接postgresql
可以使用PostgreSQL的C库:libpgPostgreSQL安装包附带或者安装PostgreSQL的ODBC驱动,通过ODBC标准函数连接PostgreSQL如果使用C++/CLI,也可以使用ADO.NET等2023-07-28 17:14:041