insert 返回字段说明

当在 PostgreSQL 中执行 INSERT 操作时,返回信息的第二列表示的是 OID,它只在表具有 OID 属性并且插入了单行数据时才有实际值。如果插入多行或者表不包含 OID,该字段将填充为 0。通过源码解析可以理解这一行为。
摘要由CSDN通过智能技术生成
--查我们插入一条数据到数据库时,pg会返回给我们如下信息,
postgres=# insert into test_2(id) select n from generate_series(1,10000) n;
INSERT 0 10000
--第一列说明是插入动作,第三列表示插入了多少行,那么第二列是什么呐


--查看源码,可知
ProcessQuery(PlannedStmt *plan,
			 const char *sourceText,
			 ParamListInfo params,
			 DestReceiver *dest,
			 char *completionTag)
{
	if (completionTag)
	{
		Oid			lastOid;

		switch (queryDesc->operation)
		{
			case CMD_SELECT:
				snprintf(completionTag, COMPLETION_TAG_BUFSIZE,
						 "SELECT %u", queryDesc->estate->es_processed);
				break;
			case CMD_INSERT:  --如果执行的命令是 insert 
				if (queryDesc->estate->es_processed == 1) --如果插入了一行
					lastOid = queryDesc->estate->es_lastoid; --插入表的 OID
				else
					lastOid = InvalidOid; --插入的行数超过一行,则返回系统默认OID=0
				snprintf(completionTag, COMPLETION_TAG_BUFSIZE,
				   "INSERT %u %u", lastOid, queryDesc->estate->es_processed); --实际打印
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值