mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Remove pg_constraint.conincluding
This column was added in commit 8224de4f42cc ("Indexes with INCLUDE columns and their support in B-tree") to ease writing the ruleutils.c supporting code for that feature, but it turns out to be unnecessary -- we can do the same thing with just one more syscache lookup. Even the documentation for the new column being removed in this commit is awkward. Discussion: https://postgr.es/m/20180902165018.33otxftp3olgtu4t@alvherre.pgsql
This commit is contained in:
parent
4ddd8f5f55
commit
c076f3d74a
@ -2373,14 +2373,6 @@ SCRAM-SHA-256$<replaceable><iteration count></replaceable>:<replaceable>&l
|
|||||||
triggers), list of the constrained columns</entry>
|
triggers), list of the constrained columns</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
|
||||||
<entry><structfield>conincluding</structfield></entry>
|
|
||||||
<entry><type>int2[]</type></entry>
|
|
||||||
<entry><literal><link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.attnum</literal></entry>
|
|
||||||
<entry>List of the non-constrained columns which are included into
|
|
||||||
the same index as the constrained columns</entry>
|
|
||||||
</row>
|
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><structfield>confkey</structfield></entry>
|
<entry><structfield>confkey</structfield></entry>
|
||||||
<entry><type>int2[]</type></entry>
|
<entry><type>int2[]</type></entry>
|
||||||
|
@ -85,7 +85,6 @@ CreateConstraintEntry(const char *constraintName,
|
|||||||
bool nulls[Natts_pg_constraint];
|
bool nulls[Natts_pg_constraint];
|
||||||
Datum values[Natts_pg_constraint];
|
Datum values[Natts_pg_constraint];
|
||||||
ArrayType *conkeyArray;
|
ArrayType *conkeyArray;
|
||||||
ArrayType *conincludingArray;
|
|
||||||
ArrayType *confkeyArray;
|
ArrayType *confkeyArray;
|
||||||
ArrayType *conpfeqopArray;
|
ArrayType *conpfeqopArray;
|
||||||
ArrayType *conppeqopArray;
|
ArrayType *conppeqopArray;
|
||||||
@ -116,21 +115,6 @@ CreateConstraintEntry(const char *constraintName,
|
|||||||
else
|
else
|
||||||
conkeyArray = NULL;
|
conkeyArray = NULL;
|
||||||
|
|
||||||
if (constraintNTotalKeys > constraintNKeys)
|
|
||||||
{
|
|
||||||
Datum *conincluding;
|
|
||||||
int j = 0;
|
|
||||||
int constraintNIncludedKeys = constraintNTotalKeys - constraintNKeys;
|
|
||||||
|
|
||||||
conincluding = (Datum *) palloc(constraintNIncludedKeys * sizeof(Datum));
|
|
||||||
for (i = constraintNKeys; i < constraintNTotalKeys; i++)
|
|
||||||
conincluding[j++] = Int16GetDatum(constraintKey[i]);
|
|
||||||
conincludingArray = construct_array(conincluding, constraintNIncludedKeys,
|
|
||||||
INT2OID, 2, true, 's');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
conincludingArray = NULL;
|
|
||||||
|
|
||||||
if (foreignNKeys > 0)
|
if (foreignNKeys > 0)
|
||||||
{
|
{
|
||||||
Datum *fkdatums;
|
Datum *fkdatums;
|
||||||
@ -204,11 +188,6 @@ CreateConstraintEntry(const char *constraintName,
|
|||||||
else
|
else
|
||||||
nulls[Anum_pg_constraint_conkey - 1] = true;
|
nulls[Anum_pg_constraint_conkey - 1] = true;
|
||||||
|
|
||||||
if (conincludingArray)
|
|
||||||
values[Anum_pg_constraint_conincluding - 1] = PointerGetDatum(conincludingArray);
|
|
||||||
else
|
|
||||||
nulls[Anum_pg_constraint_conincluding - 1] = true;
|
|
||||||
|
|
||||||
if (confkeyArray)
|
if (confkeyArray)
|
||||||
values[Anum_pg_constraint_confkey - 1] = PointerGetDatum(confkeyArray);
|
values[Anum_pg_constraint_confkey - 1] = PointerGetDatum(confkeyArray);
|
||||||
else
|
else
|
||||||
|
@ -315,7 +315,7 @@ static char *deparse_expression_pretty(Node *expr, List *dpcontext,
|
|||||||
static char *pg_get_viewdef_worker(Oid viewoid,
|
static char *pg_get_viewdef_worker(Oid viewoid,
|
||||||
int prettyFlags, int wrapColumn);
|
int prettyFlags, int wrapColumn);
|
||||||
static char *pg_get_triggerdef_worker(Oid trigid, bool pretty);
|
static char *pg_get_triggerdef_worker(Oid trigid, bool pretty);
|
||||||
static void decompile_column_index_array(Datum column_index_array, Oid relId,
|
static int decompile_column_index_array(Datum column_index_array, Oid relId,
|
||||||
StringInfo buf);
|
StringInfo buf);
|
||||||
static char *pg_get_ruledef_worker(Oid ruleoid, int prettyFlags);
|
static char *pg_get_ruledef_worker(Oid ruleoid, int prettyFlags);
|
||||||
static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
|
static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
|
||||||
@ -2055,6 +2055,8 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
|
|||||||
Datum val;
|
Datum val;
|
||||||
bool isnull;
|
bool isnull;
|
||||||
Oid indexId;
|
Oid indexId;
|
||||||
|
int keyatts;
|
||||||
|
HeapTuple indtup;
|
||||||
|
|
||||||
/* Start off the constraint definition */
|
/* Start off the constraint definition */
|
||||||
if (conForm->contype == CONSTRAINT_PRIMARY)
|
if (conForm->contype == CONSTRAINT_PRIMARY)
|
||||||
@ -2069,24 +2071,52 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
|
|||||||
elog(ERROR, "null conkey for constraint %u",
|
elog(ERROR, "null conkey for constraint %u",
|
||||||
constraintId);
|
constraintId);
|
||||||
|
|
||||||
decompile_column_index_array(val, conForm->conrelid, &buf);
|
keyatts = decompile_column_index_array(val, conForm->conrelid, &buf);
|
||||||
|
|
||||||
appendStringInfoChar(&buf, ')');
|
appendStringInfoChar(&buf, ')');
|
||||||
|
|
||||||
/* Fetch and build including column list */
|
indexId = get_constraint_index(constraintId);
|
||||||
isnull = true;
|
|
||||||
val = SysCacheGetAttr(CONSTROID, tup,
|
/* Build including column list (from pg_index.indkeys) */
|
||||||
Anum_pg_constraint_conincluding, &isnull);
|
indtup = SearchSysCache1(INDEXRELID, ObjectIdGetDatum(indexId));
|
||||||
if (!isnull)
|
if (!HeapTupleIsValid(indtup))
|
||||||
|
elog(ERROR, "cache lookup failed for index %u", indexId);
|
||||||
|
val = SysCacheGetAttr(INDEXRELID, indtup,
|
||||||
|
Anum_pg_index_indnatts, &isnull);
|
||||||
|
if (isnull)
|
||||||
|
elog(ERROR, "null indnatts for index %u", indexId);
|
||||||
|
if (DatumGetInt32(val) > keyatts)
|
||||||
{
|
{
|
||||||
|
Datum cols;
|
||||||
|
Datum *keys;
|
||||||
|
int nKeys;
|
||||||
|
int j;
|
||||||
|
|
||||||
appendStringInfoString(&buf, " INCLUDE (");
|
appendStringInfoString(&buf, " INCLUDE (");
|
||||||
|
|
||||||
decompile_column_index_array(val, conForm->conrelid, &buf);
|
cols = SysCacheGetAttr(INDEXRELID, indtup,
|
||||||
|
Anum_pg_index_indkey, &isnull);
|
||||||
|
if (isnull)
|
||||||
|
elog(ERROR, "null indkey for index %u", indexId);
|
||||||
|
|
||||||
|
deconstruct_array(DatumGetArrayTypeP(cols),
|
||||||
|
INT2OID, 2, true, 's',
|
||||||
|
&keys, NULL, &nKeys);
|
||||||
|
|
||||||
|
for (j = keyatts; j < nKeys; j++)
|
||||||
|
{
|
||||||
|
char *colName;
|
||||||
|
|
||||||
|
colName = get_attname(conForm->conrelid,
|
||||||
|
DatumGetInt16(keys[j]), false);
|
||||||
|
if (j > keyatts)
|
||||||
|
appendStringInfoString(&buf, ", ");
|
||||||
|
appendStringInfoString(&buf, quote_identifier(colName));
|
||||||
|
}
|
||||||
|
|
||||||
appendStringInfoChar(&buf, ')');
|
appendStringInfoChar(&buf, ')');
|
||||||
}
|
}
|
||||||
|
ReleaseSysCache(indtup);
|
||||||
indexId = get_constraint_index(constraintId);
|
|
||||||
|
|
||||||
/* XXX why do we only print these bits if fullCommand? */
|
/* XXX why do we only print these bits if fullCommand? */
|
||||||
if (fullCommand && OidIsValid(indexId))
|
if (fullCommand && OidIsValid(indexId))
|
||||||
@ -2232,9 +2262,10 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert an int16[] Datum into a comma-separated list of column names
|
* Convert an int16[] Datum into a comma-separated list of column names
|
||||||
* for the indicated relation; append the list to buf.
|
* for the indicated relation; append the list to buf. Returns the number
|
||||||
|
* of keys.
|
||||||
*/
|
*/
|
||||||
static void
|
static int
|
||||||
decompile_column_index_array(Datum column_index_array, Oid relId,
|
decompile_column_index_array(Datum column_index_array, Oid relId,
|
||||||
StringInfo buf)
|
StringInfo buf)
|
||||||
{
|
{
|
||||||
@ -2258,6 +2289,8 @@ decompile_column_index_array(Datum column_index_array, Oid relId,
|
|||||||
else
|
else
|
||||||
appendStringInfo(buf, ", %s", quote_identifier(colName));
|
appendStringInfo(buf, ", %s", quote_identifier(colName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 201808271
|
#define CATALOG_VERSION_NO 201809031
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -105,12 +105,6 @@ CATALOG(pg_constraint,2606,ConstraintRelationId)
|
|||||||
*/
|
*/
|
||||||
int16 conkey[1];
|
int16 conkey[1];
|
||||||
|
|
||||||
/*
|
|
||||||
* Columns of conrelid that the constraint does not apply to, but are
|
|
||||||
* included into the same index as the key columns
|
|
||||||
*/
|
|
||||||
int16 conincluding[1];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If a foreign key, the referenced columns of confrelid
|
* If a foreign key, the referenced columns of confrelid
|
||||||
*/
|
*/
|
||||||
|
@ -94,10 +94,10 @@ SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, i
|
|||||||
covering | 4 | 2 | t | f | 1 2 3 4 | 1978 1978
|
covering | 4 | 2 | t | f | 1 2 3 4 | 1978 1978
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
pg_get_constraintdef | conname | conkey | conincluding
|
pg_get_constraintdef | conname | conkey
|
||||||
----------------------------------+----------+--------+--------------
|
----------------------------------+----------+--------
|
||||||
UNIQUE (c1, c2) INCLUDE (c3, c4) | covering | {1,2} | {3,4}
|
UNIQUE (c1, c2) INCLUDE (c3, c4) | covering | {1,2}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
@ -113,10 +113,10 @@ SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, i
|
|||||||
covering | 4 | 2 | t | t | 1 2 3 4 | 1978 1978
|
covering | 4 | 2 | t | t | 1 2 3 4 | 1978 1978
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
pg_get_constraintdef | conname | conkey | conincluding
|
pg_get_constraintdef | conname | conkey
|
||||||
---------------------------------------+----------+--------+--------------
|
---------------------------------------+----------+--------
|
||||||
PRIMARY KEY (c1, c2) INCLUDE (c3, c4) | covering | {1,2} | {3,4}
|
PRIMARY KEY (c1, c2) INCLUDE (c3, c4) | covering | {1,2}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
@ -136,10 +136,10 @@ SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, i
|
|||||||
tbl_c1_c2_c3_c4_key | 4 | 2 | t | f | 1 2 3 4 | 1978 1978
|
tbl_c1_c2_c3_c4_key | 4 | 2 | t | f | 1 2 3 4 | 1978 1978
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
pg_get_constraintdef | conname | conkey | conincluding
|
pg_get_constraintdef | conname | conkey
|
||||||
----------------------------------+---------------------+--------+--------------
|
----------------------------------+---------------------+--------
|
||||||
UNIQUE (c1, c2) INCLUDE (c3, c4) | tbl_c1_c2_c3_c4_key | {1,2} | {3,4}
|
UNIQUE (c1, c2) INCLUDE (c3, c4) | tbl_c1_c2_c3_c4_key | {1,2}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
@ -155,10 +155,10 @@ SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, i
|
|||||||
tbl_pkey | 4 | 2 | t | t | 1 2 3 4 | 1978 1978
|
tbl_pkey | 4 | 2 | t | t | 1 2 3 4 | 1978 1978
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
pg_get_constraintdef | conname | conkey | conincluding
|
pg_get_constraintdef | conname | conkey
|
||||||
---------------------------------------+----------+--------+--------------
|
---------------------------------------+----------+--------
|
||||||
PRIMARY KEY (c1, c2) INCLUDE (c3, c4) | tbl_pkey | {1,2} | {3,4}
|
PRIMARY KEY (c1, c2) INCLUDE (c3, c4) | tbl_pkey | {1,2}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
@ -178,10 +178,10 @@ SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, i
|
|||||||
tbl_c1_c3_c4_excl | 3 | 1 | f | f | 1 3 4 | 1978
|
tbl_c1_c3_c4_excl | 3 | 1 | f | f | 1 3 4 | 1978
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
pg_get_constraintdef | conname | conkey | conincluding
|
pg_get_constraintdef | conname | conkey
|
||||||
--------------------------------------------------+-------------------+--------+--------------
|
--------------------------------------------------+-------------------+--------
|
||||||
EXCLUDE USING btree (c1 WITH =) INCLUDE (c3, c4) | tbl_c1_c3_c4_excl | {1} | {3,4}
|
EXCLUDE USING btree (c1 WITH =) INCLUDE (c3, c4) | tbl_c1_c3_c4_excl | {1}
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
|
@ -60,7 +60,7 @@ ALTER TABLE tbl_include_box_pk add PRIMARY KEY (c1, c2) INCLUDE (c3, c4);
|
|||||||
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
||||||
CONSTRAINT covering UNIQUE(c1,c2) INCLUDE(c3,c4));
|
CONSTRAINT covering UNIQUE(c1,c2) INCLUDE(c3,c4));
|
||||||
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
DROP TABLE tbl;
|
DROP TABLE tbl;
|
||||||
@ -68,7 +68,7 @@ DROP TABLE tbl;
|
|||||||
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
||||||
CONSTRAINT covering PRIMARY KEY(c1,c2) INCLUDE(c3,c4));
|
CONSTRAINT covering PRIMARY KEY(c1,c2) INCLUDE(c3,c4));
|
||||||
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
INSERT INTO tbl SELECT 1, NULL, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, NULL, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
@ -78,7 +78,7 @@ DROP TABLE tbl;
|
|||||||
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
||||||
UNIQUE(c1,c2) INCLUDE(c3,c4));
|
UNIQUE(c1,c2) INCLUDE(c3,c4));
|
||||||
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
DROP TABLE tbl;
|
DROP TABLE tbl;
|
||||||
@ -86,7 +86,7 @@ DROP TABLE tbl;
|
|||||||
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
||||||
PRIMARY KEY(c1,c2) INCLUDE(c3,c4));
|
PRIMARY KEY(c1,c2) INCLUDE(c3,c4));
|
||||||
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
INSERT INTO tbl SELECT 1, NULL, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, NULL, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
@ -96,7 +96,7 @@ DROP TABLE tbl;
|
|||||||
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
CREATE TABLE tbl (c1 int,c2 int, c3 int, c4 box,
|
||||||
EXCLUDE USING btree (c1 WITH =) INCLUDE(c3,c4));
|
EXCLUDE USING btree (c1 WITH =) INCLUDE(c3,c4));
|
||||||
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
SELECT indexrelid::regclass, indnatts, indnkeyatts, indisunique, indisprimary, indkey, indclass FROM pg_index WHERE indrelid = 'tbl'::regclass::oid;
|
||||||
SELECT pg_get_constraintdef(oid), conname, conkey, conincluding FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'tbl'::regclass::oid;
|
||||||
-- ensure that constraint works
|
-- ensure that constraint works
|
||||||
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT 1, 2, 3*x, box('4,4,4,4') FROM generate_series(1,10) AS x;
|
||||||
INSERT INTO tbl SELECT x, 2*x, NULL, NULL FROM generate_series(1,10) AS x;
|
INSERT INTO tbl SELECT x, 2*x, NULL, NULL FROM generate_series(1,10) AS x;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user