2007-01-28 17:16:54 +01:00
|
|
|
-- regression test for the uuid datatype
|
|
|
|
-- creating test tables
|
|
|
|
CREATE TABLE guid1
|
|
|
|
(
|
2013-11-10 15:20:52 +01:00
|
|
|
guid_field UUID,
|
2007-01-28 17:16:54 +01:00
|
|
|
text_field TEXT DEFAULT(now())
|
|
|
|
);
|
|
|
|
CREATE TABLE guid2
|
|
|
|
(
|
2013-11-10 15:20:52 +01:00
|
|
|
guid_field UUID,
|
2007-01-28 17:16:54 +01:00
|
|
|
text_field TEXT DEFAULT(now())
|
|
|
|
);
|
|
|
|
-- inserting invalid data tests
|
|
|
|
-- too long
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-1111-111111111111F');
|
2017-01-18 20:08:20 +01:00
|
|
|
ERROR: invalid input syntax for type uuid: "11111111-1111-1111-1111-111111111111F"
|
2008-09-01 22:42:46 +02:00
|
|
|
LINE 1: INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-111...
|
|
|
|
^
|
2007-01-28 17:16:54 +01:00
|
|
|
-- too short
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('{11111111-1111-1111-1111-11111111111}');
|
2017-01-18 20:08:20 +01:00
|
|
|
ERROR: invalid input syntax for type uuid: "{11111111-1111-1111-1111-11111111111}"
|
2008-09-01 22:42:46 +02:00
|
|
|
LINE 1: INSERT INTO guid1(guid_field) VALUES('{11111111-1111-1111-11...
|
|
|
|
^
|
2007-01-28 17:16:54 +01:00
|
|
|
-- valid data but invalid format
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('111-11111-1111-1111-1111-111111111111');
|
2017-01-18 20:08:20 +01:00
|
|
|
ERROR: invalid input syntax for type uuid: "111-11111-1111-1111-1111-111111111111"
|
2008-09-01 22:42:46 +02:00
|
|
|
LINE 1: INSERT INTO guid1(guid_field) VALUES('111-11111-1111-1111-11...
|
|
|
|
^
|
2007-01-28 17:16:54 +01:00
|
|
|
INSERT INTO guid1(guid_field) VALUES('{22222222-2222-2222-2222-222222222222 ');
|
2017-01-18 20:08:20 +01:00
|
|
|
ERROR: invalid input syntax for type uuid: "{22222222-2222-2222-2222-222222222222 "
|
2008-09-01 22:42:46 +02:00
|
|
|
LINE 1: INSERT INTO guid1(guid_field) VALUES('{22222222-2222-2222-22...
|
|
|
|
^
|
2007-01-28 17:16:54 +01:00
|
|
|
-- invalid data
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-G111-111111111111');
|
2017-01-18 20:08:20 +01:00
|
|
|
ERROR: invalid input syntax for type uuid: "11111111-1111-1111-G111-111111111111"
|
2008-09-01 22:42:46 +02:00
|
|
|
LINE 1: INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-G11...
|
|
|
|
^
|
2007-01-28 17:16:54 +01:00
|
|
|
INSERT INTO guid1(guid_field) VALUES('11+11111-1111-1111-1111-111111111111');
|
2017-01-18 20:08:20 +01:00
|
|
|
ERROR: invalid input syntax for type uuid: "11+11111-1111-1111-1111-111111111111"
|
2008-09-01 22:42:46 +02:00
|
|
|
LINE 1: INSERT INTO guid1(guid_field) VALUES('11+11111-1111-1111-111...
|
|
|
|
^
|
2022-12-15 00:03:11 +01:00
|
|
|
-- test non-error-throwing API
|
|
|
|
SELECT pg_input_is_valid('11', 'uuid');
|
|
|
|
pg_input_is_valid
|
|
|
|
-------------------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
2023-02-28 00:04:13 +01:00
|
|
|
SELECT * FROM pg_input_error_info('11', 'uuid');
|
|
|
|
message | detail | hint | sql_error_code
|
|
|
|
------------------------------------------+--------+------+----------------
|
|
|
|
invalid input syntax for type uuid: "11" | | | 22P02
|
2022-12-15 00:03:11 +01:00
|
|
|
(1 row)
|
|
|
|
|
2007-01-28 17:16:54 +01:00
|
|
|
--inserting three input formats
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-1111-111111111111');
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('{22222222-2222-2222-2222-222222222222}');
|
2007-01-31 20:33:54 +01:00
|
|
|
INSERT INTO guid1(guid_field) VALUES('3f3e3c3b3a3039383736353433a2313e');
|
2007-01-28 17:16:54 +01:00
|
|
|
-- retrieving the inserted data
|
|
|
|
SELECT guid_field FROM guid1;
|
|
|
|
guid_field
|
|
|
|
--------------------------------------
|
|
|
|
11111111-1111-1111-1111-111111111111
|
|
|
|
22222222-2222-2222-2222-222222222222
|
2007-01-31 20:33:54 +01:00
|
|
|
3f3e3c3b-3a30-3938-3736-353433a2313e
|
2007-01-28 17:16:54 +01:00
|
|
|
(3 rows)
|
|
|
|
|
|
|
|
-- ordering test
|
|
|
|
SELECT guid_field FROM guid1 ORDER BY guid_field ASC;
|
|
|
|
guid_field
|
|
|
|
--------------------------------------
|
|
|
|
11111111-1111-1111-1111-111111111111
|
|
|
|
22222222-2222-2222-2222-222222222222
|
2007-01-31 20:33:54 +01:00
|
|
|
3f3e3c3b-3a30-3938-3736-353433a2313e
|
2007-01-28 17:16:54 +01:00
|
|
|
(3 rows)
|
|
|
|
|
|
|
|
SELECT guid_field FROM guid1 ORDER BY guid_field DESC;
|
|
|
|
guid_field
|
|
|
|
--------------------------------------
|
2007-01-31 20:33:54 +01:00
|
|
|
3f3e3c3b-3a30-3938-3736-353433a2313e
|
2007-01-28 17:16:54 +01:00
|
|
|
22222222-2222-2222-2222-222222222222
|
|
|
|
11111111-1111-1111-1111-111111111111
|
|
|
|
(3 rows)
|
|
|
|
|
|
|
|
-- = operator test
|
2007-01-31 20:33:54 +01:00
|
|
|
SELECT COUNT(*) FROM guid1 WHERE guid_field = '3f3e3c3b-3a30-3938-3736-353433a2313e';
|
2007-01-28 17:16:54 +01:00
|
|
|
count
|
|
|
|
-------
|
|
|
|
1
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- <> operator test
|
|
|
|
SELECT COUNT(*) FROM guid1 WHERE guid_field <> '11111111111111111111111111111111';
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
2
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- < operator test
|
|
|
|
SELECT COUNT(*) FROM guid1 WHERE guid_field < '22222222-2222-2222-2222-222222222222';
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
1
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- <= operator test
|
|
|
|
SELECT COUNT(*) FROM guid1 WHERE guid_field <= '22222222-2222-2222-2222-222222222222';
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
2
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- > operator test
|
|
|
|
SELECT COUNT(*) FROM guid1 WHERE guid_field > '22222222-2222-2222-2222-222222222222';
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
1
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- >= operator test
|
|
|
|
SELECT COUNT(*) FROM guid1 WHERE guid_field >= '22222222-2222-2222-2222-222222222222';
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
2
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- btree and hash index creation test
|
|
|
|
CREATE INDEX guid1_btree ON guid1 USING BTREE (guid_field);
|
|
|
|
CREATE INDEX guid1_hash ON guid1 USING HASH (guid_field);
|
|
|
|
-- unique index test
|
|
|
|
CREATE UNIQUE INDEX guid1_unique_BTREE ON guid1 USING BTREE (guid_field);
|
|
|
|
-- should fail
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('11111111-1111-1111-1111-111111111111');
|
2007-06-04 00:16:03 +02:00
|
|
|
ERROR: duplicate key value violates unique constraint "guid1_unique_btree"
|
2009-08-01 21:59:41 +02:00
|
|
|
DETAIL: Key (guid_field)=(11111111-1111-1111-1111-111111111111) already exists.
|
2007-01-28 17:16:54 +01:00
|
|
|
-- check to see whether the new indexes are actually there
|
|
|
|
SELECT count(*) FROM pg_class WHERE relkind='i' AND relname LIKE 'guid%';
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
3
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- populating the test tables with additional records
|
|
|
|
INSERT INTO guid1(guid_field) VALUES('44444444-4444-4444-4444-444444444444');
|
|
|
|
INSERT INTO guid2(guid_field) VALUES('11111111-1111-1111-1111-111111111111');
|
|
|
|
INSERT INTO guid2(guid_field) VALUES('{22222222-2222-2222-2222-222222222222}');
|
2007-01-31 20:33:54 +01:00
|
|
|
INSERT INTO guid2(guid_field) VALUES('3f3e3c3b3a3039383736353433a2313e');
|
2007-01-28 17:16:54 +01:00
|
|
|
-- join test
|
|
|
|
SELECT COUNT(*) FROM guid1 g1 INNER JOIN guid2 g2 ON g1.guid_field = g2.guid_field;
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
3
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT COUNT(*) FROM guid1 g1 LEFT JOIN guid2 g2 ON g1.guid_field = g2.guid_field WHERE g2.guid_field IS NULL;
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
1
|
|
|
|
(1 row)
|
|
|
|
|
2019-07-14 14:30:27 +02:00
|
|
|
-- generation test
|
|
|
|
TRUNCATE guid1;
|
|
|
|
INSERT INTO guid1 (guid_field) VALUES (gen_random_uuid());
|
|
|
|
INSERT INTO guid1 (guid_field) VALUES (gen_random_uuid());
|
|
|
|
SELECT count(DISTINCT guid_field) FROM guid1;
|
|
|
|
count
|
|
|
|
-------
|
|
|
|
2
|
|
|
|
(1 row)
|
|
|
|
|
2024-03-19 09:30:24 +01:00
|
|
|
-- extract functions
|
|
|
|
-- version
|
|
|
|
SELECT uuid_extract_version('11111111-1111-5111-8111-111111111111'); -- 5
|
|
|
|
uuid_extract_version
|
|
|
|
----------------------
|
|
|
|
5
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT uuid_extract_version(gen_random_uuid()); -- 4
|
|
|
|
uuid_extract_version
|
|
|
|
----------------------
|
|
|
|
4
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT uuid_extract_version('11111111-1111-1111-1111-111111111111'); -- null
|
|
|
|
uuid_extract_version
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- timestamp
|
|
|
|
SELECT uuid_extract_timestamp('C232AB00-9414-11EC-B3C8-9F6BDECED846') = 'Tuesday, February 22, 2022 2:22:22.00 PM GMT+05:00'; -- RFC 4122bis test vector
|
|
|
|
?column?
|
|
|
|
----------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT uuid_extract_timestamp(gen_random_uuid()); -- null
|
|
|
|
uuid_extract_timestamp
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT uuid_extract_timestamp('11111111-1111-1111-1111-111111111111'); -- null
|
|
|
|
uuid_extract_timestamp
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
(1 row)
|
|
|
|
|
2007-01-28 17:16:54 +01:00
|
|
|
-- clean up
|
|
|
|
DROP TABLE guid1, guid2 CASCADE;
|