命令标签

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

一个命令标签 是 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 概念

反馈

提交任何关于“命令标签”的评论、建议或更正 在此处