命令标签

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

一个命令标签是 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/DELETERETURNING子句结合使用时会返回。

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 概念

反馈

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