{"Entry":{"collection":"protocol","key":"commandcomplete-b","name":"CommandComplete","aliases":["CommandComplete","Byte1('C')"],"metadata":{"aliases":["CommandComplete","Byte1('C')"],"category":"Backend messages","content_hash":"3754bc3fef940174be52fa331e6b3412a8012cbb8fb893871bb875d84aade97c","imported_at":"2026-09-30T00:40:44.444951+08:00","name":"CommandComplete","name_zh":"","slug":"commandcomplete-b","summary":"CommandComplete is a backend protocol message. Identifies the message as a command-completed response."}},"Definition":{"Collection":"protocol","Key":"commandcomplete-b","SourceDatabase":"center","Version":"18","SourceTable":"protocol_message","SourceKey":"commandcomplete-b","SourceRevision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","Facts":{"comparison_data":{"direction":"B","fields":[{"description":"Identifies the message as a command-completed response.","format":"Byte1('C')"},{"description":"Length of message contents in bytes, including self.","format":"Int32"},{"description":"The command tag. This is usually a single word that identifies which SQL command was completed. For an INSERT command, the tag is INSERT oid rows , where rows is the number of rows inserted. oid used to be the object ID of the inserted row if rows was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore oid is always 0. For a DELETE command, the tag is DELETE rows where rows is the number of rows deleted. For an UPDATE command, the tag is UPDATE rows where rows is the number of rows updated. For a MERGE command, the tag is MERGE rows where rows is the number of rows inserted, updated, or deleted. For a SELECT or CREATE TABLE AS command, the tag is SELECT rows where rows is the number of rows retrieved. For a MOVE command, the tag is MOVE rows where rows is the number of rows the cursor's position has been changed by. For a FETCH command, the tag is FETCH rows where rows is the number of rows that have been retrieved from the cursor. For a COPY command, the tag is COPY rows where rows is the number of rows copied. (Note: the row count appears only in PostgreSQL 8.2 and later.)","format":"String"}]},"comparison_hash":"019b4a212cb1c5ea4fd6978a8a4e5292dd1fa76fe5434ed7f0bd4f0e354af19f","description":["CommandComplete is a backend protocol message. Identifies the message as a command-completed response."],"direction":"B","facts":[{"label":"Direction","value":"Backend → frontend"},{"label":"First wire field","value":"Byte1('C')"},{"label":"Field entries","value":"3"},{"label":"Documented flow contexts","value":"Simple Query; Extended Query; COPY Operations"}],"fields":[{"description":"Identifies the message as a command-completed response.","format":"Byte1('C')"},{"description":"Length of message contents in bytes, including self.","format":"Int32"},{"description":"The command tag. This is usually a single word that identifies which SQL command was completed. For an INSERT command, the tag is INSERT oid rows , where rows is the number of rows inserted. oid used to be the object ID of the inserted row if rows was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore oid is always 0. For a DELETE command, the tag is DELETE rows where rows is the number of rows deleted. For an UPDATE command, the tag is UPDATE rows where rows is the number of rows updated. For a MERGE command, the tag is MERGE rows where rows is the number of rows inserted, updated, or deleted. For a SELECT or CREATE TABLE AS command, the tag is SELECT rows where rows is the number of rows retrieved. For a MOVE command, the tag is MOVE rows where rows is the number of rows the cursor's position has been changed by. For a FETCH command, the tag is FETCH rows where rows is the number of rows that have been retrieved from the cursor. For a COPY command, the tag is COPY rows where rows is the number of rows copied. (Note: the row count appears only in PostgreSQL 8.2 and later.)","format":"String"}],"manual_html":"\u003cdl\u003e\u003cdd\u003e\n\u003cdiv class=\"variablelist\"\u003e\n\u003cdl class=\"variablelist\"\u003e\n\u003cdt\u003e\u003cspan class=\"term\"\u003eByte1('C')\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eIdentifies the message as a command-completed response.\u003c/p\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\u003cspan class=\"term\"\u003eInt32\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eLength of message contents in bytes, including self.\u003c/p\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\u003cspan class=\"term\"\u003eString\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eThe command tag. This is usually a single word that identifies which SQL command was completed.\u003c/p\u003e\n\u003cp\u003eFor an \u003ccode class=\"command\"\u003eINSERT\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eINSERT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e, where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows inserted. \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e used to be the object ID of the inserted row if \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e is always 0.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eDELETE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eDELETE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows deleted.\u003c/p\u003e\n\u003cp\u003eFor an \u003ccode class=\"command\"\u003eUPDATE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eUPDATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows updated.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eMERGE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eMERGE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows inserted, updated, or deleted.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e or \u003ccode class=\"command\"\u003eCREATE TABLE AS\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eSELECT \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows retrieved.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eMOVE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eMOVE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows the cursor's position has been changed by.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eFETCH\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eFETCH \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows that have been retrieved from the cursor.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eCOPY\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eCOPY \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows copied. (Note: the row count appears only in \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e 8.2 and later.)\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/div\u003e\n\u003c/dd\u003e\u003c/dl\u003e","manual_path":"/docs/18/protocol-message-formats.html","related":[{"label":"Protocol flow and exchange examples","url":"/docs/18/protocol-flow.html"},{"label":"Protocol overview","url":"/docs/18/protocol-overview.html"},{"label":"Simple Query","url":"/docs/18/protocol-flow.html#PROTOCOL-FLOW-SIMPLE-QUERY"},{"label":"Extended Query","url":"/docs/18/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY"},{"label":"COPY Operations","url":"/docs/18/protocol-flow.html#PROTOCOL-COPY"}],"release":{"channel":"stable","label":"18.6","major":"18","ref":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2","revision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"},"sections":[{"paragraphs":["The complete definition below retains repetition, counts and conditional fields. A numbered table row is a documented field definition, not a fixed byte offset. Integer encodings and flow rules follow the same-version protocol chapter."],"title":"Framing and repetition"}],"signature":"CommandComplete (B)","sources":[{"label":"PostgreSQL 18 English manual","path":"protocol-message-formats.html","sha256":"53f37652ac2c089e30ada87d8aee7bdd0f26695b03f275302e526a807d2a1f23","url":"/docs/18/protocol-message-formats.html#PROTOCOL-MESSAGE-FORMATS-COMMANDCOMPLETE"}],"tables":[{"columns":[{"key":"c0","label":"Position"},{"key":"c1","label":"Format"},{"key":"c2","label":"Meaning"}],"key":"fields","rows":[{"c0":"1","c1":"Byte1('C')","c2":"Identifies the message as a command-completed response."},{"c0":"2","c1":"Int32","c2":"Length of message contents in bytes, including self."},{"c0":"3","c1":"String","c2":"The command tag. This is usually a single word that identifies which SQL command was completed. For an INSERT command, the tag is INSERT oid rows , where rows is the number of rows inserted. oid used to be the object ID of the inserted row if rows was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore oid is always 0. For a DELETE command, the tag is DELETE rows where rows is the number of rows deleted. For an UPDATE command, the tag is UPDATE rows where rows is the number of rows updated. For a MERGE command, the tag is MERGE rows where rows is the number of rows inserted, updated, or deleted. For a SELECT or CREATE TABLE AS command, the tag is SELECT rows where rows is the number of rows retrieved. For a MOVE command, the tag is MOVE rows where rows is the number of rows the cursor's position has been changed by. For a FETCH command, the tag is FETCH rows where rows is the number of rows that have been retrieved from the cursor. For a COPY command, the tag is COPY rows where rows is the number of rows copied. (Note: the row count appears only in PostgreSQL 8.2 and later.)"}],"title":"Wire fields in documented order"}]},"ManualEvidence":{"manual_path":"/docs/18/protocol-message-formats.html","release":{"channel":"stable","label":"18.6","major":"18","ref":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2","revision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"},"sources":[{"label":"PostgreSQL 18 English manual","path":"protocol-message-formats.html","sha256":"53f37652ac2c089e30ada87d8aee7bdd0f26695b03f275302e526a807d2a1f23","url":"/docs/18/protocol-message-formats.html#PROTOCOL-MESSAGE-FORMATS-COMMANDCOMPLETE"}]},"MeasuredEvidence":{}},"Text":{"Collection":"protocol","Key":"commandcomplete-b","SourceDatabase":"center","Version":"18","Locale":"en","Title":"CommandComplete","Summary":"CommandComplete is a backend protocol message. Identifies the message as a command-completed response.","BodyHTML":"\u003cdl\u003e\u003cdd\u003e\n\u003cdiv\u003e\n\u003cdl\u003e\n\u003cdt\u003e\u003cspan\u003eByte1(\u0026#39;C\u0026#39;)\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eIdentifies the message as a command-completed response.\u003c/p\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\u003cspan\u003eInt32\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eLength of message contents in bytes, including self.\u003c/p\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\u003cspan\u003eString\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eThe command tag. This is usually a single word that identifies which SQL command was completed.\u003c/p\u003e\n\u003cp\u003eFor an \u003ccode\u003eINSERT\u003c/code\u003e command, the tag is \u003ccode\u003eINSERT \u003cem\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e, where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows inserted. \u003cem\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e used to be the object ID of the inserted row if \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore \u003cem\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e is always 0.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode\u003eDELETE\u003c/code\u003e command, the tag is \u003ccode\u003eDELETE \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows deleted.\u003c/p\u003e\n\u003cp\u003eFor an \u003ccode\u003eUPDATE\u003c/code\u003e command, the tag is \u003ccode\u003eUPDATE \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows updated.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode\u003eMERGE\u003c/code\u003e command, the tag is \u003ccode\u003eMERGE \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows inserted, updated, or deleted.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode\u003eSELECT\u003c/code\u003e or \u003ccode\u003eCREATE TABLE AS\u003c/code\u003e command, the tag is \u003ccode\u003eSELECT \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows retrieved.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode\u003eMOVE\u003c/code\u003e command, the tag is \u003ccode\u003eMOVE \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows the cursor\u0026#39;s position has been changed by.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode\u003eFETCH\u003c/code\u003e command, the tag is \u003ccode\u003eFETCH \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows that have been retrieved from the cursor.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode\u003eCOPY\u003c/code\u003e command, the tag is \u003ccode\u003eCOPY \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows copied. (Note: the row count appears only in \u003cspan\u003ePostgreSQL\u003c/span\u003e 8.2 and later.)\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/div\u003e\n\u003c/dd\u003e\u003c/dl\u003e","SourceRevision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","ContentHash":"4ea94f71f9f8fda89ccb66112a9767e739e90292d8437e13126d8f548975e2cc","Payload":{"description":["CommandComplete is a backend protocol message. Identifies the message as a command-completed response."],"manual_html":"\u003cdl\u003e\u003cdd\u003e\n\u003cdiv class=\"variablelist\"\u003e\n\u003cdl class=\"variablelist\"\u003e\n\u003cdt\u003e\u003cspan class=\"term\"\u003eByte1('C')\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eIdentifies the message as a command-completed response.\u003c/p\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\u003cspan class=\"term\"\u003eInt32\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eLength of message contents in bytes, including self.\u003c/p\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\u003cspan class=\"term\"\u003eString\u003c/span\u003e\u003c/dt\u003e\n\u003cdd\u003e\n\u003cp\u003eThe command tag. This is usually a single word that identifies which SQL command was completed.\u003c/p\u003e\n\u003cp\u003eFor an \u003ccode class=\"command\"\u003eINSERT\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eINSERT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e, where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows inserted. \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e used to be the object ID of the inserted row if \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoid\u003c/code\u003e\u003c/em\u003e is always 0.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eDELETE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eDELETE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows deleted.\u003c/p\u003e\n\u003cp\u003eFor an \u003ccode class=\"command\"\u003eUPDATE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eUPDATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows updated.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eMERGE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eMERGE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows inserted, updated, or deleted.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eSELECT\u003c/code\u003e or \u003ccode class=\"command\"\u003eCREATE TABLE AS\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eSELECT \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows retrieved.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eMOVE\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eMOVE \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows the cursor's position has been changed by.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eFETCH\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eFETCH \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows that have been retrieved from the cursor.\u003c/p\u003e\n\u003cp\u003eFor a \u003ccode class=\"command\"\u003eCOPY\u003c/code\u003e command, the tag is \u003ccode class=\"literal\"\u003eCOPY \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e where \u003cem class=\"replaceable\"\u003e\u003ccode\u003erows\u003c/code\u003e\u003c/em\u003e is the number of rows copied. (Note: the row count appears only in \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e 8.2 and later.)\u003c/p\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/div\u003e\n\u003c/dd\u003e\u003c/dl\u003e","related":[{"label":"Protocol flow and exchange examples","url":"/docs/18/protocol-flow.html"},{"label":"Protocol overview","url":"/docs/18/protocol-overview.html"},{"label":"Simple Query","url":"/docs/18/protocol-flow.html#PROTOCOL-FLOW-SIMPLE-QUERY"},{"label":"Extended Query","url":"/docs/18/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY"},{"label":"COPY Operations","url":"/docs/18/protocol-flow.html#PROTOCOL-COPY"}],"sections":[{"paragraphs":["The complete definition below retains repetition, counts and conditional fields. A numbered table row is a documented field definition, not a fixed byte offset. Integer encodings and flow rules follow the same-version protocol chapter."],"title":"Framing and repetition"}],"tables":[{"columns":[{"key":"c0","label":"Position"},{"key":"c1","label":"Format"},{"key":"c2","label":"Meaning"}],"key":"fields","rows":[{"c0":"1","c1":"Byte1('C')","c2":"Identifies the message as a command-completed response."},{"c0":"2","c1":"Int32","c2":"Length of message contents in bytes, including self."},{"c0":"3","c1":"String","c2":"The command tag. This is usually a single word that identifies which SQL command was completed. For an INSERT command, the tag is INSERT oid rows , where rows is the number of rows inserted. oid used to be the object ID of the inserted row if rows was 1 and the target table had OIDs, but OIDs system columns are not supported anymore; therefore oid is always 0. For a DELETE command, the tag is DELETE rows where rows is the number of rows deleted. For an UPDATE command, the tag is UPDATE rows where rows is the number of rows updated. For a MERGE command, the tag is MERGE rows where rows is the number of rows inserted, updated, or deleted. For a SELECT or CREATE TABLE AS command, the tag is SELECT rows where rows is the number of rows retrieved. For a MOVE command, the tag is MOVE rows where rows is the number of rows the cursor's position has been changed by. For a FETCH command, the tag is FETCH rows where rows is the number of rows that have been retrieved from the cursor. For a COPY command, the tag is COPY rows where rows is the number of rows copied. (Note: the row count appears only in PostgreSQL 8.2 and later.)"}],"title":"Wire fields in documented order"}]}},"RequestedLocale":"zh-Hans","Fallback":true,"Versions":["10","11","12","13","14","15","16","17","18","19","20"],"Locales":["en"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
