insert 返回字段说明

简介: --查我们插入一条数据到数据库时,pg会返回给我们如下信息,postgres=# insert into test_2(id) select n from generate_series(...
--查我们插入一条数据到数据库时,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); --实际打印的输出
				break;
			case CMD_UPDATE:
				snprintf(completionTag, COMPLETION_TAG_BUFSIZE,
						 "UPDATE %u", queryDesc->estate->es_processed);
				break;
			case CMD_DELETE:
				snprintf(completionTag, COMPLETION_TAG_BUFSIZE,
						 "DELETE %u", queryDesc->estate->es_processed);
				break;
			default:
				strcpy(completionTag, "???");
				break;
		}
	}
	
}


--由以上可知 pg插入返回的第二列是一个oid
--只有在表具有oid属性,且插入行数为一行时,第二列才实际被填充

postgres=# create table t1(id int) with (oids=true);
CREATE TABLE
postgres=# \d+ t1;
                          Table "public.t1"
 Column |  Type   | Modifiers | Storage | Stats target | Description 
--------+---------+-----------+---------+--------------+-------------
 id     | integer |           | plain   |              | 
Has OIDs: yes

--oid列被填充
postgres=# insert into t1 values(1);                
INSERT 33125 1
--超过一行,oid列被填充为0
postgres=# insert into t1 values(1),(2);  
INSERT 0 2	


目录
相关文章
|
3天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
219 132
|
10天前
|
人工智能 算法 测试技术
轻量高效,8B 性能强劲书生科学多模态模型Intern-S1-mini开源
继 7 月 26 日开源『书生』科学多模态大模型 Intern-S1 之后,上海人工智能实验室(上海AI实验室)在8月23日推出了轻量化版本 Intern-S1-mini。
351 51
|
20天前
|
人工智能 JavaScript 前端开发
实战使用 Qwen3-coder 低代码开发 HTML 个人网站
阿里巴巴开源的Qwen3-coder模型,凭借强大性能和低代码能力,助力用户快速搭建个人网站。本文详解环境配置、提示词设计与部署流程,适合编程新手快速上手,掌握AI辅助开发技能。
1356 8