PostgreSQL最常见问题海南一哥

PostgreSQL读作Post-Gres-Q-L,有时候也简称为Postgres。

PostgreSQL是面向目标的关系数据库系统,它具有传统商业数据库系统的所有功能,同时又含有将在下一代DBMS系统的使用的增强特性。PostgreSQL是自由免费的,并且所有源代码都可以获得。

(Permissiontouse,copy,modify,anddistributethissoftwareanditsdocumentationforanypurpose,withoutfee,andwithoutawrittenagreementisherebygranted,providedthattheabovecopyrightnoticeandthisparagraphandthefollowingtwoparagraphsappearinallcopies.)

在任何情况下,加州大学都不承担因使用此软件及其文档而导致的对任何当事人的直接的,间接的,特殊的,附加的或者相伴而生的损坏,包括利益损失的责任,即使加州大学已经建议了这些损失的可能性时也是如此。

(INNOEVENTSHALLTHEUNIVERSITYOFCALIFORNIABELIABLETOANYPARTYFORDIRECT,INDIRECT,SPECIAL,INCIDENTAL,ORCONSEQUENTIALDAMAGES,INCLUDINGLOSTPROFITS,ARISINGOUTOFTHEUSEOFTHISSOFTWAREANDITSDOCUMENTATION,EVENIFTHEUNIVERSITYOFCALIFORNIAHASBEENADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGE.)

加州大学明确放弃任何保证,包括但不局限于某一特定用途的商业和利益的隐含保证。这里提供的这份软件是基于“当作是”的基础的,因而加州大学没有责任提供维护,支持,更新,增强或者修改的服务。

(THEUNIVERSITYOFCALIFORNIASPECIFICALLYDISCLAIMSANYWARRANTIES,INCLUDING,BUTNOTLIMITEDTO,THEIMPLIEDWARRANTIESOFMERCHANTABILITYANDFITNESSFORAPARTICULARPURPOSE.THESOFTWAREPROVIDEDHEREUNDERISONAN"ASIS"BASIS,ANDTHEUNIVERSITYOFCALIFORNIAHASNOOBLIGATIONSTOPROVIDEMAINTENANCE,SUPPORT,UPDATES,ENHANCEMENTS,ORMODIFICATIONS.)

一般说来,一个现代的UNIX兼容的平台都能运行PostgreSQL。在安装指南里列出了发布时经过明确测试的平台。

主要的IRC频道是在FreeNode(irc.freenode.net)的#postgresql,为了连上此频道,可以使用UNIX程序irc,其指令格式:irc-c'#postgresql'"$USER"irc.freenode.net,或者使用其他IRC客户端程序。在此网络中还存在一个PostgreSQL的西班牙频道(#postgersql-es)和法语频道(#postgresql-fr)。同样地,在EFNET上也有一个PostgreSQL的交流频道。

同样也可访问ftp站点ftp://ftp.PostgreSQL.org/pub/检查有无更新的PostgreSQL版本或补丁。

PostgreSQL最新的版本是版本8.0.2(译注:现最新版本为8.0.3)。

我们计划每年发布一个主要版本,每几个月发布一个小版本。

客户端的命令行程序psql有一些以/d开头的命令,可显示关于类型,操作符,函数,汇总等的信息,使用/可以显示所有可用的命令。

我们的web站点包含更多的文档。

评价软件有好几种方法:特性,性能,可靠性,支持和价格。

PostgreSQL(缺省情况)只安装有C和内嵌式C的接口,其他的接口都是独立的项目,能够分别下载,这些接口项目独立的好处是他们可以有各自的发布计划和各自独立的开发组。

对于复杂的任务,很多人采用Perl接口和CGI.pm或mod_perl。

在运行configure时加上--prefix选项。

缺省时,PostgreSQL只允许通过unix域套接字或TCP/IP方式且来自本机的连接。你只有在修改了配置文件postgresql.conf中的listen_addresses,且也在配置文件pg_hba.conf中打开了主机为基础(host-based)的身份认证,并重新启动PostgreSQL,否则其他机器是不能与你的PostgreSQL服务器连接的。

有三个主要方面可以提升PostgreSQL的潜能。

PostgreSQL有很多类似log_*的服务器配置变量可用于查询的打印和进程统计,而这些工作对调试和性能测试很有帮助。

这表示你已达到缺省100个并发后台进程数的限制,你需要通过修改postgresql.conf文件中的max_connections值来增加postmaster的后台并发处理数,修改后需重新启动postmaster。

PostgreSQL开发组对每次小的升级仅做了较少的修改,因此从7.4.0升级到7.4.1不需要dump和restore。但是主要的升级(例如从7.3到7.4)通常会修改系统表和数据表的内部格式。这些变化一般比较复杂,因此我们不维数据文件的向后兼容。dump将数据按照通用的格式输出,随后可以被重新加载并使用新的内部格式。

由于计算机硬件大多数是兼容的,人们总是倾向于相信所有计算机硬件质量也是相同的。事实上不是,ECCRAM(带奇偶校验的内存),SCSI(硬盘)和优质的主板比一些便宜货要更加可靠且具有更好的性能。PostgreSQL几乎可以运行在任何硬件上,但如果可靠性和性能对你的系统很重要,你就需要全面的研究一下你的硬件配置了。在我们的邮件列表上也有关于硬件配置和性价比的讨论。

如果你只是要提取几行数据,并且你在执行查询中知道确切的行数,你可以使用LIMIT功能。如果有一个索引与ORDERBY中的条件匹配,PostgreSQL可能就只处理要求的头几条记录,(否则将对整个查询进行处理直到生成需要的行)。如果在执行查询功能时不知道确切的记录数,可使用游标(cursor)和FETCH功能。

可使用以下方法提取一行随机记录的:

SELECTcols FROMtab ORDERBYrandom() LIMIT1;4.2)如何查看表、索引、数据库以及用户的定义?如何查看psql里用到的查询指令并显示它们?在psql中使用/dt命令来显示数据表的定义,要了解psql中的完整命令列表可使用/,另外,你也可以阅读psql的源代码文件pgsql/src/bin/psql/describe.c,它包括为生成psql反斜杠命令的输出的所有SQL命令。你还可以带-E选项启动psql,这样它将打印出执行你在psql中所给出的命令的内部实际使用的SQL查询。PostgreSQL也提供了一个兼容SQL的INFORMATIONSCHEMA接口,你可以从这里获取关于数据库的信息。

在系统中有一些以pg_打头的系统表也描述了表的定义。

使用psql-l指令可以列出所有的数据库。

也可以浏览一下pgsql/src/tutorial/syscat.source文件,它列举了很多可从数据库系统表中获取信息的SELECT语法。

在8.0版本里更改一个字段的数据类型很容易,可使用ALTERTABLEALTERCOLUMNTYPE。

在以前的版本中,可以这样做:

BEGIN;ALTERTABLEtabADDCOLUMNnew_colnew_data_type;UPDATEtabSETnew_col=CAST(old_colASnew_data_type);ALTERTABLEtabDROPCOLUMNold_col;COMMIT;你然后可以使用VACUUMFULLtab指令来使系统收回无效数据所占用的空间。

下面是一些限制:

当然,实际上没有真正的无限制,还是要受可用磁盘空间、可用内存/交换区的制约。事实上,当这些数值变得异常地大时,系统性能也会受很大影响。

表的最大尺寸32TB不需要操作系统对大文件的支持。大表用多个1GB的文件存储,因此文件系统尺寸的限制是不重要的。

如果缺省的块大小增长到32K,最大的表尺寸和最大列数还可以增加到四倍。

一个Postgres数据库(存储一个文本文件)所占用的空间最多可能需要相当于这个文本文件自身大小5倍的磁盘空间。

例如,假设有一个100,000行的文件,每行有一个整数和一个文本描述。假设文本串的平均长度为20字节。文本文件占用2.8MB。存放这些数据的PostgreSQL数据库文件大约是6.4MB:

32字节:每行的头(估计值)24字节:一个整数型字段和一个文本型字段+4字节:页面内指向元组的指针----------------------------------------60字节每行PostgreSQL数据页的大小是8192字节(8KB),则:8192字节每页-------------------=136行/数据页(向下取整)60字节每行100000数据行--------------------=735数据页(向上取整)128行每页735数据页*8192字节/页=6,021,120字节(6MB)索引不需要这么多的额外消耗,但也确实包括被索引的数据,因此它们也可能很大。

空值NULL存放在位图中,因此占用很少的空间。

并非每个查询都会自动使用索引。只有在表的大小超过一个最小值,并且查询只会选中表中较小比例的记录时才会采用索引。这是因为索引扫描引起的随即磁盘存取可能比直接地读取表(顺序扫描)更慢。

为了判断是否使用索引,PostgreSQL必须获得有关表的统计值。这些统计值可以使用VACUUMANALYZE,或ANALYZE获得。使用统计值,优化器知道表中有多少行,就能够更好地判断是否利用索引。统计值对确定优化的连接顺序和连接方法也很有用。在表的内容发生变化时,应定期进行统计值的更新收集。

索引通常不用于ORDERBY或执行连接。对一个大表的一次顺序扫描,再做一个显式的排序通常比索引扫描要快。

但是,在LIMIT和ORDERBY结合使用时经常会使用索引,因为这只会返回表的一小部分。实际上,虽然MAX()和MIN()并不使用索引,通过对ORDERBY和LLIMIT使用索引取得最大值和最小值也是可以的:

SELECTcol FROMtab ORDERBYcol[DESC] LIMIT1;如果你确信PostgreSQL的优化器使用顺序扫描是不正确的,你可以使用SETenable_seqscanTO'off'指令,然后再次运行查询,你就可以看出使用一个索引扫描是否确实要快一些。

当使用通配符操作,例如LIKE或~时,索引只能在特定的情况下使用:

在8.0之前的版本中,除非要查询的数据类型和索引的数据类型相匹配,否则索引经常是未被用到,特别是对int2,int8和数值型的索引。

参考EXPLAIN手册页。

操作符~处理正则表达式匹配,而~*处理大小写无关的正则表达式匹配。大写些无关的LIKE变种成为ILIKE。

大小写无关的等式比较通常写做:

SELECT*FROMtabWHERElower(col)='abc';这样将不会使用标准的索引。但是可以创建一个可被利用的函数索引:

CREATEINDEXtabindexONtab(lower(col));4.9)在一个查询里,我怎样检测一个字段是否为NULL?我如何才能准确排序而不论某字段是否含NULL值?用ISNULL和ISNOTNULL测试这个字段,具体方法如下:

SELECT*FROMtabWHEREcolISNULL;为了能对含NULL字段排序,可在ORDERBY条件中使用ISNULL和ISNOTNULL修饰符,条件为真true将比条件为假false排在前面,下面的例子就会将含NULL的记录排在结果的上面部分:

SELECT*FROMtabORDERBY(colISNOTNULL)4.10)各种字符类型之间有什么不同?类型内部名称说明VARCHAR(n)varchar指定了最大长度,变长字符串,不足定义长度的部分不补齐CHAR(n)bpchar定长字符串,实际数据不足定义长度时,以空格补齐TEXTtext没有特别的上限限制(仅受行的最大长度限制)BYTEAbytea变长字节序列(使用NULL也是允许的)"char"char一个字符在系统表和在一些错误信息里你将看到内部名称。

VARCHAR(n)在存储限制了最大长度的变长字符串是最好的。TEXT适用于存储最大可达1G左右但未定义限制长度的字符串。

CHAR(n)最适合于存储长度相同的字符串。CHAR(n)会根据所给定的字段长度以空格补足(不足的字段内容),而VARCHAR(n)只存储所给定的数据内容。BYTEA用于存储二进制数据,尤其是包含NULL字节的值。这些类型具有相似的性能特性。

PostgreSQL支持SERIAL数据类型。它在字段上自动创建一个序列和索引。例如:

CREATETABLEperson( idSERIAL, nameTEXT );会自动转换为:

CREATESEQUENCEperson_id_seq; CREATETABLEperson( idINT4NOTNULLDEFAULTnextval('person_id_seq'), nameTEXT );参考create_sequence手册页获取关于序列的更多信息。

new_id=execute("SELECTnextval('person_id_seq')"); execute("INSERTINTOperson(id,name)VALUES(new_id,'BlaisePascal')");这样还能在其他查询中使用存放在new_id里的新值(例如,作为person表的外键)。注意自动创建的SEQUENCE对象的名称将会是

__seq,这里table和serialcolumn分别是你的表的名称和你的SERIAL字段的名称。

类似的,在SERIAL对象缺省插入后你可以用函数currval()检索刚赋值的SERIAL值,例如:

execute("INSERTINTOperson(name)VALUES('BlaisePascal')"); new_id=execute("SELECTcurrval('person_id_seq')");4.11.3)使用currval()会导致和其他用户的冲突情况(racecondition)吗?不会。currval()返回的是你本次会话进程所赋的值而不是所有用户的当前值。

为了提高并发性,序列号在需要的时候赋予正在运行的事务,并且在事务结束之前不进行锁定,这就会导致异常中止的事务后,序列号会出现间隔。

PostgreSQL里创建的每一行记录都会获得一个唯一的OID,除非在创建表时使用WITHOUTOIDS选项。OID创建时会自动生成一个4字节的整数,所有OID在整个PostgreSQL中均是唯一的。然而,它在超过40亿时将溢出,OID此后会出现重复。PostgreSQL在它的内部系统表里使用OID在表之间建立联系。

在用户的数据表中,最好是使用SERIAl来代替OID因为SERIAL只是保证在单个表中数据是唯一的,这样它溢出的可能性就非常小了,SERIAL8可用来保存8字节的序列号字段。

CTID用于标识带着数据块(地址)和(块内)偏移的特定的物理行。CTID在记录被更改或重载后发生改变。索引入口使用它们指向物理行。

这很可能是系统的虚拟内存用光了,或者内核对某些资源有较低的限制值。在启动postmaster之前试试下面的命令:

ulimit-d262144 limitdatasize256m取决于你用的shell,上面命令只有一条能成功,但是它将把你的进程数据段限制设得比较高,因而也许能让查询完成。这条命令应用于当前进程,以及所有在这条命令运行后创建的子进程。如果你是在运行SQL客户端时因为后台返回了太多的数据而出现问题,请在运行客户端之前执行上述命令。

从psql里,输入SELECTversion();指令。

使用CURRENT_TIMESTAMP:

CREATETABLEtest(xint,modtimeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);4.16)我怎样进行outerjoin(外连接)?PostgreSQL采用标准的SQL语法支持外连接。这里是两个例子:

SELECT* FROMt1LEFTOUTERJOINt2ON(t1.col=t2.col);或是

SELECT* FROMt1LEFTOUTERJOINt2USING(col);这两个等价的查询在t1.col和t2.col上做连接,并且返回t1中所有未连接的行(那些在t2中没有匹配的行)。右[外]连接(RIGHTOUTERJOIN)将返回t2中未连接的行。完全外连接(FULLOUTERJOIN)将返回t1和t2中未连接的行。关键字OUTER在左[外]连接、右[外]连接和完全[外]连接中是可选的,普通连接被称为内连接(INNERJOIN)。

附加增值模块contrib/dblink允许采用函数调用实现跨库查询。当然用户也可以同时连接到不同的数据库执行查询然后在客户端合并结果。

PL/PgSQL会缓存函数的内容,由此带来的一个不好的副作用是若一个PL/PgSQL函数访问了一个临时表,然后该表被删除并重建了,则再次调用该函数将失败,因为缓存的函数内容仍然指向旧的临时表。解决的方法是在PL/PgSQL中用EXECUTE对临时表进行访问。这样会保证查询在执行前总会被重新解析。

“复制”只是一个术语,有好几种复制技术可使用,每种都有优点和缺点:

也有一些商业需付费和基于硬件的数据复制方案,支持上述各种复制模型。

THE END
1.APP/网站/基础软件十大排行榜十大学习网站排名 网上学习平台哪个好 在线网络学习网站推荐 云课堂 互联网 12万+ 十大批发网站 进货批发网站哪个好 批发进货平台有哪些 网购 科技/发明 45万+ 十大壁纸网站排行 高清壁纸网站推荐 电脑壁纸网站哪个好 图片网 互联网 17万+ 十大跑分软件排行 电脑跑分软件哪个好 靠谱的电脑检测软件推荐 工https://m.maigoo.com/top/list_1842.html
2.2024年十大社交平台排行榜社交软件有哪些平台十大品牌网CNPP重磅推出2024社交平台十大品牌排行榜,社交平台品牌排行榜前十名有微信、抖音、腾讯QQ、微博、快手、哔哩哔哩、小红书、知乎、豆瓣、百度贴吧。十大社交平台品牌由品牌数据部门通过收集整理大数据分析研究得出,旨在告诉消费者社交平台什么牌子好。https://www.cnpp.cn/china/list_4509.html
3.社交应用十大品牌排行榜品牌网是国内较早专注于一站式品牌服务的平台,历史悠久且权威公正的测评机构/大数据云计算公司,通过广泛收集整理汇编全球权威数据,定期发布更新客观公正的排行榜!更多详情> 十大品牌最新新闻 危废间都有哪些品牌 危废间品牌排行一览 十大品牌 2024-12-06 危废暂存间牌子有哪些 盘点市面上热门的危废暂存间品牌https://www.chinapp.com/paihang/sjyy
4.可靠的网络兼职平台,适合兼职的平台有哪些?下方有微信二维码,可扫码了解 今日就给大伙儿一个详细介绍一些小白也可以实际操作的副业和服务平台,也会标明一些新项目的分别特性,和所必须哪些的标准。 正规陪聊项目,无任何费用,正规平台不涉黄,长按二维码识别,也可保存二维码,点击微信扫一扫加好友,加客服微信,没有任何费用。 https://www.jianshu.com/p/509909fbf895
5.网上保险销售平台靠谱吗?保险销售渠道有哪些?保险销售渠道有哪些? 随着社会的发展,现今的保险销售平台除了传统的电话营销、面对面营销之外,还有了网络营销。那么网络保险销售平台作为新生事物,很多人对它还吃有一定的怀疑态度,它到底靠谱吗?其实答案很明确,网上保险是可靠的!并且现在网络上买保险优惠力度往往也是比较大的。https://www.cpic.com.cn/c/2020-12-01/1613624.shtml
6.征信查询软件哪个可靠?网络征信查询平台征信查询软件有哪些?征信查询软件大全是小编为广大用户带来的个人信用软件下载合集!现在社会发展越来越快,个人信用系统运用比较普遍,我们熟悉的就有芝麻信用这种信用积分,它可以反应出你个人在金融上的信用好坏,这里带来的这些软件都可以帮助用户快速的了解自己的征信情况,并且除了个人信用外,有的软件还可以查询企业信用,http://www.2265.com/k/zhengxinchaxunruanjian/
7.福建地区可靠的网络借贷平台一览随着互联网金融的快速发展网络借贷平台已经成为了人们投资理财的新选择。网络借贷市场鱼龙混杂投资者怎样在众多平台中找到一个安全、可靠的平台呢?福建地区的网络借贷平台有哪些值得信的选择?本文将为大家一一揭晓福建地区可靠的网络借贷平台一览帮助投资者避免选择风险平台实现财富增值。 https://www.cnxds.com/2024baiqi/yqyongka/189852.html
8.十大网络保险平台网络保险平台有几类 可不可靠 线上线下联合销售,这类网络保险平台通常与线下的保险公司一起联合销售产品,扩大客户群。网络保险平台可不可靠无论是保险公司自主开发的保险网站还是保险经纪开发的独立保险平台,都给予了消费一定的便利,让消费者不费力气轻松选购心仪的保险产品。通常情况 https://m.shenlanbao.com/he/1411304
9.正规网上贷款平台有哪些?蚂蚁借呗京东金条和度小满金融靠谱吗哪个贷款平台比较靠谱? 靠谱的贷款平台有北京银行消费e点贷、借趣花、提钱花、一享花、豆豆钱、优钱花、蚂蚁借呗、微众银行微利贷、京东金条等。 可靠的贷款平台 1、北京银行消费e点贷:该产品由北京银行消费金融平台推出,是一款查询信用报告的产品。授信额度范围在1000元至5万元之间,贷款期限为3至12个月。切记按时还https://m.bjhwtx.com/h-nd-191584.html
10.陕西财政云知识手册2.云化技术平台建设特色有哪些? 1) 按需分配资源的IaaS平台,实现计算、存储、网络等资源虚拟化、池化,提升管理和运维自动化水平。 2) 统一、开放的PaaS云平台体系,包括云应用平台(微服务框架、通用服务等)和数据平台(含大数据),支撑SaaS应用全面云化建设。 https://czj.yangling.gov.cn/zfxxgk/fdzdgknr/tzgg/1427222441989550081.html
11.新型农村合作医疗制度目前,辽宁省并没有建立全省统一的新农合管理平台,各市分头制定政策进行管理,执行标准差异很大。 1、缺乏全省统一的定点医疗机构信息化网络平台。20xx年,辽宁省卫计委投资建设全省统一的信息化平台,旨在使全省的定点医疗机构全部实现联网,方便各市农民看病、转诊及报销。 https://www.jy135.com/zhidu/740073.html
12.网络传播论文在日常学习和工作生活中,许多人都有过写论文的经历,对论文都不陌生吧,论文是对某些学术问题进行研究的手段。一篇什么样的论文才能称为优秀论文呢?下面是小编精心整理的网络传播论文,仅供参考,欢迎大家阅读。 网络传播论文1 一、网络平台的建设 (一)学生信息管理系统的建设 https://www.ruiwen.com/lunwen/6308347.html
13.相亲平台有哪些网上相亲平台哪个靠谱接亲网大家应该有所发现,近几年结婚的年龄都比较偏大,现在的很多年轻人都很少会考虑结婚,所以总会被家里的人催促相亲,由于现在网络业务的发展,我们也有了很多线上相亲的平台,只要我们有一台电脑,再连个网就可以进行相关相亲软件平台的搜索,这一期小编给大家带来了相亲平台有哪些,网上相亲平台哪个靠谱的相关内容,如果你有需https://www.jieqinwang.com/baike/97718.html
14.网络购物平台有哪些网络购物平台最新消息由于网络发展带动,网上购物已经成为一种时尚,而且将永存。故购物平台可以分为两大类,一般购物平台和网上购物平台。一般购物平台就是现实生活中的商场、店铺等,有时销售渠道也统称为购物平台。https://www.admin5.com/tags/wangluogouwupingtai/
15.什么是电子商务安全的重要性威胁和解决方案定期更新 WordPress 核心安全工具和插件的重要性可能会给您带来压力,但是,一旦安全更新和补丁发布,就应该安装它们,因为黑客可以使用机器人来识别哪些网站使用过时的软件。这使得过时的软件成为严重的责任。 选择一个可靠的电子商务平台 选择一个安全的电子商务平台非常重要,该平台会定期自我更新并提供高质量的安全性。电子https://www.mfisp.com/12223.html