*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.34 2002/08/27 03:56:34 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.35 2002/08/28 20:18:29 momjian Exp $
*
*-------------------------------------------------------------------------
*/
/*
* Create unique index on chunk_id, chunk_seq.
*
- * NOTE: the tuple toaster could actually function with a single-column
- * index on chunk_id only. However, it couldn't be unique then. We
- * want it to be unique as a check against the possibility of
- * duplicate TOAST chunk OIDs. Too, the index might be a little more
- * efficient this way, since btree isn't all that happy with large
- * numbers of equal keys.
+ * NOTE: the normal TOAST access routines could actually function with
+ * a single-column index on chunk_id only. However, the slice access
+ * routines use both columns for faster access to an individual chunk.
+ * In addition, we want it to be unique as a check against the
+ * possibility of duplicate TOAST chunk OIDs. The index might also be
+ * a little more efficient this way, since btree isn't all that happy
+ * with large numbers of equal keys.
*/
indexInfo = makeNode(IndexInfo);
CREATE TABLE toasttest(f1 text);
insert into toasttest values(repeat('1234567890',10000));
insert into toasttest values(repeat('1234567890',10000));
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(repeat('1234567890',10000));
+insert into toasttest values(repeat('1234567890',10000));
-- If the starting position is zero or less, then return from the start of the string
-- adjusting the length to be consistent with the "negative start" per SQL92.
SELECT substr(f1, -1, 5) from toasttest;
--------
123
123
-(2 rows)
+ 123
+ 123
+(4 rows)
-- If the length is less than zero, an ERROR is thrown.
SELECT substr(f1, 5, -1) from toasttest;
--------
567890
567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
-- If start plus length is > string length, the result is truncated to
-- string length
--------
567890
567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
DROP TABLE toasttest;
--
CREATE TABLE toasttest(f1 bytea);
insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
-- If the starting position is zero or less, then return from the start of the string
-- adjusting the length to be consistent with the "negative start" per SQL92.
SELECT substr(f1, -1, 5) from toasttest;
--------
123
123
-(2 rows)
+ 123
+ 123
+(4 rows)
-- If the length is less than zero, an ERROR is thrown.
SELECT substr(f1, 5, -1) from toasttest;
--------
567890
567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
-- If start plus length is > string length, the result is truncated to
-- string length
--------
567890
567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
DROP TABLE toasttest;
--
insert into toasttest values(repeat('1234567890',10000));
insert into toasttest values(repeat('1234567890',10000));
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(repeat('1234567890',10000));
+insert into toasttest values(repeat('1234567890',10000));
+
-- If the starting position is zero or less, then return from the start of the string
-- adjusting the length to be consistent with the "negative start" per SQL92.
SELECT substr(f1, -1, 5) from toasttest;
insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+
-- If the starting position is zero or less, then return from the start of the string
-- adjusting the length to be consistent with the "negative start" per SQL92.
SELECT substr(f1, -1, 5) from toasttest;