postgresql怎么获取insert插入的新纪录的id值

postgresql怎么获取insert插入的新纪录的id值,第1张

首先数据表中要有一个子增长的字段。字段类型设置成:

然后,在该字段的属性里边会有一个序列

继续,通常我们都这样来插入数据:

query("insert into ");

紧接着执行这样的sql,就会得到刚才插入的id值

result = query("select currval('address_address_id_seq')"); // 加粗部分就是上边红框内的序列

这次查询返回的结果一般是这样的:

我们需要的部分也主要是红框内的数据,这样我们想要的结果就出来了。

80版以上的时候:

alter table 你的表名 alter column 列名 type 你的新类型

80版以下的时候:

把要修改的表dump下来,在dump文件中直接修改,再重新导入道数据库中。

这个有些危险,如果数据类型不合的话,会出问题。比如由字符类型转数字类型。

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

解析:

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目, 并且有非常广泛的用户。

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

PostgreSQL的二进制数据类型为bytea,可最多保存2G的数据。在ADO、ODBC等接口,可通过带参数化的插入SQL语句上传二进制。

然而在某些接口、SQL语句无法进行参数绑定,或者某些语言没有二进制的类型,或者接口的不兼容等原因,常无法上传二进制数据。

碰到这种情况下,必须在客户端将二进制转化为一定规则的字符序列,然后插入语句时,来个显示转换cast('字符序列' as bytea)

二进制转化为字符序列的规则:

分析每个字节,当其ASCII值在0到31,127到255,或为39、92,请将这字节转化为3位的八进制字符串,前面加上2个反斜杠,如chr(39)表示为//047 其他ascii值为可显示字符,不变,当然你也可全部转化为八进制,但这样整个字符串太长,浪费空间。

如二进制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'转化为字符序列为:

//000ab//351//031c

上传的时候再来个显示转换,如 insert into table1 (aa) values (cast('//000ab//351//031c' as bytea))

如果二进制数据太大,可分次上传,用||连接符连接起来,如:

insert into table1 (id,aa) values (1,cast('序列1' as bytea))

update table1 set aa=aa||cast('序列2' as bytea) where id=1

首先知道substring函数在PostgreSQL中的作用。在这段SQ语句中,substring是使用的substring(txt from reg)的形式,其中, txt是要进行正则匹配的源字符串,reg是匹配的正则表达式。如此,我们大概可以知道:这段代码的then其实就是用information进行一些正则表达式的匹配,然后获取匹配后的那段字符串。

这段代码中一共有3个substring函数调用,而执行的顺序则与它们出现的顺序相反,首先执行的是:

substring(information from E':step_1: \\([0 -9]+)' )

它获得匹配step_1: 后面所跟的数字;假设information为:step_1: 1234a, 那么获得的就是1234;

接下来为第二substring, 它是用information来匹配上面获得的数字嵌入":&"和":step_1:"的那段内容;

而最后一个substring,则是匹配第二个获得的字串,其中前为“loan_purpose: ”接下来为非换行符号的那部分字串(即获得以“loan_purpose: ”开始的所有非换行字符,遇到换行符就终止,不包括"loan_purpose: ")。

一个例子:

select substring( substring( information FROM': &' ||  substring(information from E':step_1: 

\\([0-9]+)'

) ||':step_1:') 

from E'loan_purpose: ([^\n]+)')

from (select 'start here: &1234loan_purpose: Hello World:step_1: 1234end'::character varying as information)

s

运行结果如图,

看你对精度的要求大不大。

如果你允许部分的精度丢失的, 那么可以用 Double

如果你那一列, 是用来存储金额的, 不允许精度丢失的, 那么还是使用 BigDecimal 比较好!

以上就是关于postgresql怎么获取insert插入的新纪录的id值全部的内容,包括:postgresql怎么获取insert插入的新纪录的id值、在linux下的PostgreSQL中,如何修改字段的数据类型(用命令修改)、postgresql是什么数据库请详解一下,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9819035.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存