<entry><type>char[]</type></entry>
<entry></entry>
<entry>
- An array containing codes for the enabled statistic types;
+ An array containing codes for the enabled statistic kinds;
valid values are:
<literal>d</literal> for n-distinct statistics,
<literal>f</literal> for functional dependency statistics
</para>
<para>
- The following subsections describe the types of extended statistics
+ The following subsections describe the kinds of extended statistics
that are currently supported.
</para>
<title>Functional Dependencies</title>
<para>
- The simplest type of extended statistics tracks <firstterm>functional
+ The simplest kind of extended statistics tracks <firstterm>functional
dependencies</>, a concept used in definitions of database normal forms.
We say that column <structfield>b</> is functionally dependent on
column <structfield>a</> if knowledge of the value of
<refsynopsisdiv>
<synopsis>
CREATE STATISTICS [ IF NOT EXISTS ] <replaceable class="PARAMETER">statistics_name</replaceable>
- [ ( <replaceable class="PARAMETER">statistic_type</replaceable> [, ... ] ) ]
+ [ ( <replaceable class="PARAMETER">statistics_kind</replaceable> [, ... ] ) ]
ON <replaceable class="PARAMETER">column_name</replaceable>, <replaceable class="PARAMETER">column_name</replaceable> [, ...]
FROM <replaceable class="PARAMETER">table_name</replaceable>
</synopsis>
</varlistentry>
<varlistentry>
- <term><replaceable class="PARAMETER">statistic_type</replaceable></term>
+ <term><replaceable class="PARAMETER">statistics_kind</replaceable></term>
<listitem>
<para>
- A statistic type to be computed in this statistics object.
- Currently supported types are
+ A statistics kind to be computed in this statistics object.
+ Currently supported kinds are
<literal>ndistinct</literal>, which enables n-distinct statistics, and
<literal>dependencies</literal>, which enables functional
dependency statistics.
- If this clause is omitted, all supported statistic types are
+ If this clause is omitted, all supported statistics kinds are
included in the statistics object.
For more information, see <xref linkend="planner-stats-extended">
and <xref linkend="multivariate-statistics-examples">.
will terminate the application. If set to a larger numeric value,
that many consecutive <acronym>EOF</> characters must be typed to
make an interactive session terminate. If the variable is set to a
- non-numeric value, it is interpreted as 10.
+ non-numeric value, it is interpreted as 10. The default is 0.
</para>
<note>
<para>
if (fromdisk)
{
ereport(WARNING,
- (errmsg("removing stale two-phase state file for \"%u\"",
+ (errmsg("removing stale two-phase state file for transaction %u",
xid)));
RemoveTwoPhaseFile(xid, true);
}
else
{
ereport(WARNING,
- (errmsg("removing stale two-phase state from shared memory for \"%u\"",
+ (errmsg("removing stale two-phase state from memory for transaction %u",
xid)));
PrepareRedoRemove(xid, true);
}
if (fromdisk)
{
ereport(WARNING,
- (errmsg("removing future two-phase state file for \"%u\"",
+ (errmsg("removing future two-phase state file for transaction %u",
xid)));
RemoveTwoPhaseFile(xid, true);
}
else
{
ereport(WARNING,
- (errmsg("removing future two-phase state from memory for \"%u\"",
+ (errmsg("removing future two-phase state from memory for transaction %u",
xid)));
PrepareRedoRemove(xid, true);
}
if (buf == NULL)
{
ereport(WARNING,
- (errmsg("removing corrupt two-phase state file for \"%u\"",
+ (errmsg("removing corrupt two-phase state file for transaction %u",
xid)));
RemoveTwoPhaseFile(xid, true);
return NULL;
if (fromdisk)
{
ereport(WARNING,
- (errmsg("removing corrupt two-phase state file for \"%u\"",
+ (errmsg("removing corrupt two-phase state file for transaction %u",
xid)));
RemoveTwoPhaseFile(xid, true);
}
else
{
ereport(WARNING,
- (errmsg("removing corrupt two-phase state from memory for \"%u\"",
+ (errmsg("removing corrupt two-phase state from memory for transaction %u",
xid)));
PrepareRedoRemove(xid, true);
}
LWLockRelease(CheckpointLock);
END_CRIT_SECTION();
ereport(DEBUG1,
- (errmsg("checkpoint skipped due to an idle system")));
+ (errmsg("checkpoint skipped because system is idle")));
return;
}
}
if (!SplitIdentifierString(publish, ',', &publish_list))
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("invalid publish list")));
+ errmsg("invalid list syntax for \"publish\" option")));
/* Process the option list. */
foreach(lc, publish_list)
if (!HeapTupleIsValid(atttuple))
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_COLUMN),
- errmsg("column \"%s\" referenced in statistics does not exist",
+ errmsg("column \"%s\" does not exist",
attname)));
attForm = (Form_pg_attribute) GETSTRUCT(atttuple);
if (type->lt_opr == InvalidOid)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("column \"%s\" cannot be used in statistics because its type has no default btree operator class",
- attname)));
+ errmsg("column \"%s\" cannot be used in statistics because its type %s has no default btree operator class",
+ attname, format_type_be(attForm->atttypid))));
/* Make sure no more than STATS_MAX_DIMENSIONS columns are used */
if (numcols >= STATS_MAX_DIMENSIONS)
stxkeys = buildint2vector(attnums, numcols);
/*
- * Parse the statistics types.
+ * Parse the statistics kinds.
*/
build_ndistinct = false;
build_dependencies = false;
else
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("unrecognized statistic type \"%s\"",
+ errmsg("unrecognized statistics kind \"%s\"",
type)));
}
/* If no statistic type was specified, build them all. */
errmsg("table \"%s\" contains column \"%s\" not found in parent \"%s\"",
RelationGetRelationName(attachrel), attributeName,
RelationGetRelationName(rel)),
- errdetail("New partition should contain only the columns present in parent.")));
+ errdetail("The new partition may contain only the columns present in parent.")));
}
/*
(TRIGGER_FOR_DELETE(tgtype) ? 1 : 0)) != 1)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("Transition tables cannot be specified for triggers with more than one event")));
+ errmsg("transition tables cannot be specified for triggers with more than one event")));
if (tt->isNew)
{
if (cmd == CMD_UPDATE && pubactions->pubupdate)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("cannot update table \"%s\" because it does not have replica identity and publishes updates",
+ errmsg("cannot update table \"%s\" because it does not have a replica identity and publishes updates",
RelationGetRelationName(rel)),
errhint("To enable updating the table, set REPLICA IDENTITY using ALTER TABLE.")));
else if (cmd == CMD_DELETE && pubactions->pubdelete)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("cannot delete from table \"%s\" because it does not have replica identity and publishes deletes",
+ errmsg("cannot delete from table \"%s\" because it does not have a replica identity and publishes deletes",
RelationGetRelationName(rel)),
errhint("To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE.")));
}
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
- errmsg("the number of %s (%i) must be 1 or the same as the number of %s (%i)",
+ errmsg("the number of %s (%d) must be 1 or the same as the number of %s (%d)",
optionname,
list_length(options),
mastername,
{
if (!get_typisdefined(remoteid))
ereport(ERROR,
- (errmsg("builtin type %u not found", remoteid),
- errhint("This can be caused by having publisher with "
- "higher major version than subscriber")));
+ (errmsg("built-in type %u not found", remoteid),
+ errhint("This can be caused by having a publisher with a higher PostgreSQL major version than the subscriber.")));
return remoteid;
}
{
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("publisher does not send replica identity column "
+ errmsg("publisher did not send replica identity column "
"expected by the logical replication target relation \"%s.%s\"",
rel->remoterel.nspname, rel->remoterel.relname)));
}
/* The tuple to be deleted could not be found. */
ereport(DEBUG1,
(errmsg("logical replication could not find row for delete "
- "in replication target %s",
+ "in replication target relation \"%s\"",
RelationGetRelationName(rel->localrel))));
}
default:
ereport(ERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
- errmsg("invalid logical replication message type %c", action)));
+ errmsg("invalid logical replication message type \"%c\"", action)));
}
}
if (parsed > PG_UINT32_MAX || parsed < 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("proto_verson \"%s\" out of range",
+ errmsg("proto_version \"%s\" out of range",
strVal(defel->arg))));
*protocol_version = (uint32) parsed;
if (event_relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
- errmsg("could not convert partitioned table \"%s\" to a view",
+ errmsg("cannot convert partitioned table \"%s\" to a view",
RelationGetRelationName(event_relation))));
if (event_relation->rd_rel->relispartition)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
- errmsg("could not convert partition \"%s\" to a view",
+ errmsg("cannot convert partition \"%s\" to a view",
RelationGetRelationName(event_relation))));
snapshot = RegisterSnapshot(GetLatestSnapshot());
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("could not import the requested snapshot"),
- errdetail("The source process with pid %d is not running anymore.",
+ errdetail("The source process with PID %d is not running anymore.",
sourcepid)));
}
else
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
- errmsg("invalid input syntax for %s: \"%s\"",
- "integer", str)));
+ errmsg("invalid input syntax for integer: \"%s\"",
+ str)));
}
/* process digits */
else
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
- errmsg("invalid input syntax for %s: \"%s\"",
- "integer", str)));
+ errmsg("invalid input syntax for integer: \"%s\"",
+ str)));
}
*result = (sign < 0) ? -tmp : tmp;
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("expected json array"),
- errhint("see the value of key \"%s\"", ctx->colname)));
+ errhint("See the value of key \"%s\".", ctx->colname)));
else
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("expected json array"),
- errhint("see the array element %s of key \"%s\"",
+ errhint("See the array element %s of key \"%s\".",
indices.data, ctx->colname)));
else
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("expected json array"),
- errhint("see the array element %s",
+ errhint("See the array element %s.",
indices.data)));
}
}
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
errmsg("macaddr8 data out of range to convert to macaddr"),
errhint("Only addresses that have FF and FE as values in the "
- "4th and 5th bytes, from the left, for example: "
- "XX-XX-XX-FF-FE-XX-XX-XX, are eligible to be converted "
+ "4th and 5th bytes from the left, for example "
+ "xx:xx:xx:ff:fe:xx:xx:xx, are eligible to be converted "
"from macaddr8 to macaddr.")));
result->a = addr->a;
if (*s == 0)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
- errmsg("invalid input syntax for %s: \"%s\"",
- "integer", s)));
+ errmsg("invalid input syntax for integer: \"%s\"",
+ s)));
errno = 0;
l = strtol(s, &badp, 10);
if (s == badp)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
- errmsg("invalid input syntax for %s: \"%s\"",
- "integer", s)));
+ errmsg("invalid input syntax for integer: \"%s\"",
+ s)));
switch (size)
{
if (*badp && *badp != c)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
- errmsg("invalid input syntax for %s: \"%s\"",
- "integer", s)));
+ errmsg("invalid input syntax for integer: \"%s\"",
+ s)));
return (int32) l;
}
|| (xid_epoch == now_epoch && xid > now_epoch_last_xid))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("transaction ID " UINT64_FORMAT " is in the future",
- xid_with_epoch)));
+ errmsg("transaction ID %s is in the future",
+ psprintf(UINT64_FORMAT, xid_with_epoch))));
/*
* ShmemVariableCache->oldestClogXid is protected by CLogTruncationLock,
Assert(TransactionIdIsValid(xid));
if (TransactionIdIsCurrentTransactionId(xid))
- status = gettext_noop("in progress");
+ status = "in progress";
else if (TransactionIdDidCommit(xid))
- status = gettext_noop("committed");
+ status = "committed";
else if (TransactionIdDidAbort(xid))
- status = gettext_noop("aborted");
+ status = "aborted";
else
{
/*
* checked commit/abort status).
*/
if (TransactionIdPrecedes(xid, GetActiveSnapshot()->xmin))
- status = gettext_noop("aborted");
+ status = "aborted";
else
- status = gettext_noop("in progress");
+ status = "in progress";
}
}
else
{"max_pred_locks_per_relation", PGC_SIGHUP, LOCK_MANAGEMENT,
gettext_noop("Sets the maximum number of predicate-locked pages and tuples per relation."),
gettext_noop("If more than this total of pages and tuples in the same relation are locked "
- "by a connection, those locks are replaced by a relation level lock.")
+ "by a connection, those locks are replaced by a relation-level lock.")
},
&max_predicate_locks_per_relation,
-2, INT_MIN, INT_MAX,
{"max_pred_locks_per_page", PGC_SIGHUP, LOCK_MANAGEMENT,
gettext_noop("Sets the maximum number of predicate-locked tuples per page."),
gettext_noop("If more than this number of tuples on the same page are locked "
- "by a connection, those locks are replaced by a page level lock.")
+ "by a connection, those locks are replaced by a page-level lock.")
},
&max_predicate_locks_per_page,
2, 0, INT_MAX,
{
{"ssl_dh_params_file", PGC_SIGHUP, CONN_AUTH_SECURITY,
- gettext_noop("Location of the SSL DH params file."),
+ gettext_noop("Location of the SSL DH parameters file."),
NULL,
GUC_SUPERUSER_ONLY
},
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("could not import the requested snapshot"),
- errdetail("The source process with pid %d is not running anymore.",
+ errdetail("The source process with PID %d is not running anymore.",
sourcepid)));
/*
{
/* string is not recognized; don't clobber *result */
if (name)
- psql_error("unrecognized value \"%s\" for \"%s\": boolean expected\n",
+ psql_error("unrecognized value \"%s\" for \"%s\": Boolean expected\n",
value, name);
valid = false;
}
int2vector stxkeys; /* array of column keys */
#ifdef CATALOG_VARLEN
- char stxkind[1] BKI_FORCE_NOT_NULL; /* statistic types requested
+ char stxkind[1] BKI_FORCE_NOT_NULL; /* statistics kinds requested
* to build */
pg_ndistinct stxndistinct; /* ndistinct coefficients (serialized) */
pg_dependencies stxdependencies; /* dependencies (serialized) */
CREATE TABLE fail_part (like list_parted, c int);
ALTER TABLE list_parted ATTACH PARTITION fail_part FOR VALUES IN (1);
ERROR: table "fail_part" contains column "c" not found in parent "list_parted"
-DETAIL: New partition should contain only the columns present in parent.
+DETAIL: The new partition may contain only the columns present in parent.
DROP TABLE fail_part;
-- check that the table being attached has every column of the parent
CREATE TABLE fail_part (a int NOT NULL);
ALTER TABLE pt2 ATTACH PARTITION pt2_1 FOR VALUES IN (1); -- ERROR
ERROR: table "pt2_1" contains column "c4" not found in parent "pt2"
-DETAIL: New partition should contain only the columns present in parent.
+DETAIL: The new partition may contain only the columns present in parent.
DROP FOREIGN TABLE pt2_1;
\d+ pt2
Table "public.pt2"
SELECT ia FROM json_populate_record(NULL::jsrec, '{"ia": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ia"
+HINT: See the value of key "ia".
SELECT ia FROM json_populate_record(NULL::jsrec, '{"ia": [1, "2", null, 4]}') q;
ia
--------------
SELECT ia FROM json_populate_record(NULL::jsrec, '{"ia": [[1], 2]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ia"
+HINT: See the array element [1] of key "ia".
SELECT ia FROM json_populate_record(NULL::jsrec, '{"ia": [[1], [2, 3]]}') q;
ERROR: malformed json array
DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions.
SELECT ia1 FROM json_populate_record(NULL::jsrec, '{"ia1": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ia1"
+HINT: See the value of key "ia1".
SELECT ia1 FROM json_populate_record(NULL::jsrec, '{"ia1": [1, "2", null, 4]}') q;
ia1
--------------
SELECT ia1d FROM json_populate_record(NULL::jsrec, '{"ia1d": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ia1d"
+HINT: See the value of key "ia1d".
SELECT ia1d FROM json_populate_record(NULL::jsrec, '{"ia1d": [1, "2", null, 4]}') q;
ERROR: value for domain js_int_array_1d violates check constraint "js_int_array_1d_check"
SELECT ia1d FROM json_populate_record(NULL::jsrec, '{"ia1d": [1, "2", null]}') q;
DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions.
SELECT ia2 FROM json_populate_record(NULL::jsrec, '{"ia2": [[1, 2], 3, 4]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ia2"
+HINT: See the array element [1] of key "ia2".
SELECT ia2d FROM json_populate_record(NULL::jsrec, '{"ia2d": [[1, "2"], [null, 4]]}') q;
ERROR: value for domain js_int_array_2d violates check constraint "js_int_array_2d_check"
SELECT ia2d FROM json_populate_record(NULL::jsrec, '{"ia2d": [[1, "2", 3], [null, 5, 6]]}') q;
SELECT ta FROM json_populate_record(NULL::jsrec, '{"ta": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ta"
+HINT: See the value of key "ta".
SELECT ta FROM json_populate_record(NULL::jsrec, '{"ta": [1, "2", null, 4]}') q;
ta
--------------
SELECT ta FROM json_populate_record(NULL::jsrec, '{"ta": [[1, 2, 3], {"k": "v"}]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ta"
+HINT: See the array element [1] of key "ta".
SELECT c FROM json_populate_record(NULL::jsrec, '{"c": null}') q;
c
---
SELECT ca FROM json_populate_record(NULL::jsrec, '{"ca": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ca"
+HINT: See the value of key "ca".
SELECT ca FROM json_populate_record(NULL::jsrec, '{"ca": [1, "2", null, 4]}') q;
ca
-----------------------------------------------
ERROR: value too long for type character(10)
SELECT ca FROM json_populate_record(NULL::jsrec, '{"ca": [[1, 2, 3], {"k": "v"}]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ca"
+HINT: See the array element [1] of key "ca".
SELECT js FROM json_populate_record(NULL::jsrec, '{"js": null}') q;
js
----
SELECT jsa FROM json_populate_record(NULL::jsrec, '{"jsa": 123}') q;
ERROR: expected json array
-HINT: see the value of key "jsa"
+HINT: See the value of key "jsa".
SELECT jsa FROM json_populate_record(NULL::jsrec, '{"jsa": [1, "2", null, 4]}') q;
jsa
--------------------
SELECT reca FROM json_populate_record(NULL::jsrec, '{"reca": 123}') q;
ERROR: expected json array
-HINT: see the value of key "reca"
+HINT: See the value of key "reca".
SELECT reca FROM json_populate_record(NULL::jsrec, '{"reca": [1, 2]}') q;
ERROR: cannot call populate_composite on a scalar
SELECT reca FROM json_populate_record(NULL::jsrec, '{"reca": [{"a": "abc", "b": 456}, null, {"c": "01.02.2003", "x": 43.2}]}') q;
select * from json_to_record('{"ia": 123}') as x(ia _int4);
ERROR: expected json array
-HINT: see the value of key "ia"
+HINT: See the value of key "ia".
select * from json_to_record('{"ia": [1, "2", null, 4]}') as x(ia _int4);
ia
--------------
select * from json_to_record('{"ia": [[1], 2]}') as x(ia _int4);
ERROR: expected json array
-HINT: see the array element [1] of key "ia"
+HINT: See the array element [1] of key "ia".
select * from json_to_record('{"ia": [[1], [2, 3]]}') as x(ia _int4);
ERROR: malformed json array
DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions.
SELECT ia FROM jsonb_populate_record(NULL::jsbrec, '{"ia": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ia"
+HINT: See the value of key "ia".
SELECT ia FROM jsonb_populate_record(NULL::jsbrec, '{"ia": [1, "2", null, 4]}') q;
ia
--------------
SELECT ia FROM jsonb_populate_record(NULL::jsbrec, '{"ia": [[1], 2]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ia"
+HINT: See the array element [1] of key "ia".
SELECT ia FROM jsonb_populate_record(NULL::jsbrec, '{"ia": [[1], [2, 3]]}') q;
ERROR: malformed json array
DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions.
SELECT ia1 FROM jsonb_populate_record(NULL::jsbrec, '{"ia1": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ia1"
+HINT: See the value of key "ia1".
SELECT ia1 FROM jsonb_populate_record(NULL::jsbrec, '{"ia1": [1, "2", null, 4]}') q;
ia1
--------------
SELECT ia1d FROM jsonb_populate_record(NULL::jsbrec, '{"ia1d": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ia1d"
+HINT: See the value of key "ia1d".
SELECT ia1d FROM jsonb_populate_record(NULL::jsbrec, '{"ia1d": [1, "2", null, 4]}') q;
ERROR: value for domain jsb_int_array_1d violates check constraint "jsb_int_array_1d_check"
SELECT ia1d FROM jsonb_populate_record(NULL::jsbrec, '{"ia1d": [1, "2", null]}') q;
DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions.
SELECT ia2 FROM jsonb_populate_record(NULL::jsbrec, '{"ia2": [[1, 2], 3, 4]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ia2"
+HINT: See the array element [1] of key "ia2".
SELECT ia2d FROM jsonb_populate_record(NULL::jsbrec, '{"ia2d": [[1, "2"], [null, 4]]}') q;
ERROR: value for domain jsb_int_array_2d violates check constraint "jsb_int_array_2d_check"
SELECT ia2d FROM jsonb_populate_record(NULL::jsbrec, '{"ia2d": [[1, "2", 3], [null, 5, 6]]}') q;
SELECT ta FROM jsonb_populate_record(NULL::jsbrec, '{"ta": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ta"
+HINT: See the value of key "ta".
SELECT ta FROM jsonb_populate_record(NULL::jsbrec, '{"ta": [1, "2", null, 4]}') q;
ta
--------------
SELECT ta FROM jsonb_populate_record(NULL::jsbrec, '{"ta": [[1, 2, 3], {"k": "v"}]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ta"
+HINT: See the array element [1] of key "ta".
SELECT c FROM jsonb_populate_record(NULL::jsbrec, '{"c": null}') q;
c
---
SELECT ca FROM jsonb_populate_record(NULL::jsbrec, '{"ca": 123}') q;
ERROR: expected json array
-HINT: see the value of key "ca"
+HINT: See the value of key "ca".
SELECT ca FROM jsonb_populate_record(NULL::jsbrec, '{"ca": [1, "2", null, 4]}') q;
ca
-----------------------------------------------
ERROR: value too long for type character(10)
SELECT ca FROM jsonb_populate_record(NULL::jsbrec, '{"ca": [[1, 2, 3], {"k": "v"}]}') q;
ERROR: expected json array
-HINT: see the array element [1] of key "ca"
+HINT: See the array element [1] of key "ca".
SELECT js FROM jsonb_populate_record(NULL::jsbrec, '{"js": null}') q;
js
----
SELECT jsa FROM jsonb_populate_record(NULL::jsbrec, '{"jsa": 123}') q;
ERROR: expected json array
-HINT: see the value of key "jsa"
+HINT: See the value of key "jsa".
SELECT jsa FROM jsonb_populate_record(NULL::jsbrec, '{"jsa": [1, "2", null, 4]}') q;
jsa
--------------------
SELECT reca FROM jsonb_populate_record(NULL::jsbrec, '{"reca": 123}') q;
ERROR: expected json array
-HINT: see the value of key "reca"
+HINT: See the value of key "reca".
SELECT reca FROM jsonb_populate_record(NULL::jsbrec, '{"reca": [1, 2]}') q;
ERROR: cannot call populate_composite on a scalar
SELECT reca FROM jsonb_populate_record(NULL::jsbrec, '{"reca": [{"a": "abc", "b": 456}, null, {"c": "01.02.2003", "x": 43.2}]}') q;
select * from jsonb_to_record('{"ia": 123}') as x(ia _int4);
ERROR: expected json array
-HINT: see the value of key "ia"
+HINT: See the value of key "ia".
select * from jsonb_to_record('{"ia": [1, "2", null, 4]}') as x(ia _int4);
ia
--------------
select * from jsonb_to_record('{"ia": [[1], 2]}') as x(ia _int4);
ERROR: expected json array
-HINT: see the array element [1] of key "ia"
+HINT: See the array element [1] of key "ia".
select * from jsonb_to_record('{"ia": [[1], [2, 3]]}') as x(ia _int4);
ERROR: malformed json array
DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions.
invalid variable name: "invalid/name"
-- fail: invalid value for special variable
\set AUTOCOMMIT foo
-unrecognized value "foo" for "AUTOCOMMIT": boolean expected
+unrecognized value "foo" for "AUTOCOMMIT": Boolean expected
\set FETCH_COUNT foo
invalid value "foo" for "FETCH_COUNT": integer expected
-- check handling of built-in boolean variable
\endif
-- invalid boolean expressions are false
\if invalid boolean expression
-unrecognized value "invalid boolean expression" for "\if expression": boolean expected
+unrecognized value "invalid boolean expression" for "\if expression": Boolean expected
\echo 'will not print #6-1'
\else
\echo 'will print anyway #6-2'
create table fooview (x int, y text) partition by list (x);
create rule "_RETURN" as on select to fooview do instead
select 1 as x, 'aaa'::text as y;
-ERROR: could not convert partitioned table "fooview" to a view
+ERROR: cannot convert partitioned table "fooview" to a view
-- nor can one convert a partition to view
create table fooview_part partition of fooview for values in (1);
create rule "_RETURN" as on select to fooview_part do instead
select 1 as x, 'aaa'::text as y;
-ERROR: could not convert partition "fooview_part" to a view
+ERROR: cannot convert partition "fooview_part" to a view
--
-- check for planner problems with complex inherited UPDATES
--
CREATE STATISTICS tst ON a, b FROM nonexistant;
ERROR: relation "nonexistant" does not exist
CREATE STATISTICS tst ON a, b FROM pg_class;
-ERROR: column "a" referenced in statistics does not exist
+ERROR: column "a" does not exist
CREATE STATISTICS tst ON relname, relname, relnatts FROM pg_class;
ERROR: duplicate column name in statistics definition
CREATE STATISTICS tst ON relnatts + relpages FROM pg_class;
CREATE STATISTICS tst ON (relpages, reltuples) FROM pg_class;
ERROR: only simple column references are allowed in CREATE STATISTICS
CREATE STATISTICS tst (unrecognized) ON relname, relnatts FROM pg_class;
-ERROR: unrecognized statistic type "unrecognized"
+ERROR: unrecognized statistics kind "unrecognized"
-- Ensure stats are dropped sanely, and test IF NOT EXISTS while at it
CREATE TABLE ab1 (a INTEGER, b INTEGER, c INTEGER);
CREATE STATISTICS IF NOT EXISTS ab1_a_b_stats ON a, b FROM ab1;
create trigger my_table_multievent_trig
after insert or update on my_table referencing new table as new_table
for each statement execute procedure dump_insert();
-ERROR: Transition tables cannot be specified for triggers with more than one event
+ERROR: transition tables cannot be specified for triggers with more than one event
drop table my_table;
--
-- Test firing of triggers with transition tables by foreign key cascades