命令标签

成功执行命令后返回的关键字

命令标签 是 PostgreSQL 在成功执行除 SELECT 以外的 SQL 命令后返回的关键字。

通常命令标签就是刚刚执行的命令,例如:

postgres=# BEGIN ;
BEGIN

postgres=*# CREATE TABLE foo(id INT);
CREATE TABLE

postgres=*# INSERT INTO foo values(1);
INSERT 0 1

postgres=*# UPDATE foo SET id = 2 WHERE id = 1;
UPDATE 1

postgres=*# DELETE FROM foo;
DELETE 1

SELECT(以及 TABLE)不返回命令标签,但是 INSERT/UPDATE/DELETE 结合 RETURNING 子句则会返回。

postgres=# INSERT INTO foo values(1) RETURNING id;
 id
----
  1
(1 row)

INSERT 0 1

postgres=# SELECT * FROM foo;
 id
----
  1
(1 row)

在某些情况下,返回的命令标签会不同,如果执行的命令导致了不同的解析,例如:

postgres=# BEGIN;
BEGIN

postgres=*# SELECT foo;
ERROR:  column "foo" does not exist
LINE 1: SELECT foo;
               ^

postgres=!# COMMIT;
ROLLBACK

也有一些情况,一个命令实际上是另一个命令的别名;在这种情况下,实际执行的命令将作为命令标签返回,例如:

postgres=*# END;
COMMIT

内部实现

命令标签作为 前端/后端协议CommandComplete 消息的一部分传递回客户端。

客户端可以自行决定如何处理命令标签。

libpq 中,PQcmdStatus() 函数返回命令标签。

分类

PostgreSQL概念

反馈

提交关于“Command tag”的任何评论、建议或更正请在此处 提交