diff --git a/contrib/uuid-ossp/Makefile b/contrib/uuid-ossp/Makefile
index c52c583d648..48d2523d4a4 100644
--- a/contrib/uuid-ossp/Makefile
+++ b/contrib/uuid-ossp/Makefile
@@ -4,7 +4,8 @@ MODULE_big = uuid-ossp
OBJS = uuid-ossp.o $(UUID_EXTRA_OBJS) $(WIN32RES)
EXTENSION = uuid-ossp
-DATA = uuid-ossp--1.1.sql uuid-ossp--1.0--1.1.sql uuid-ossp--unpackaged--1.0.sql
+DATA = uuid-ossp--1.2.sql uuid-ossp--1.1--1.2.sql uuid-ossp--1.0--1.1.sql \
+ uuid-ossp--unpackaged--1.0.sql
PGFILEDESC = "uuid-ossp - UUID generation"
REGRESS = uuid_ossp
diff --git a/contrib/uuid-ossp/expected/uuid_ossp.out b/contrib/uuid-ossp/expected/uuid_ossp.out
index 409c885c33a..1c54c6ef129 100644
--- a/contrib/uuid-ossp/expected/uuid_ossp.out
+++ b/contrib/uuid-ossp/expected/uuid_ossp.out
@@ -118,12 +118,24 @@ SELECT uuid_generate_v3(uuid_ns_dns(), 'www.widgets.com');
3d813cbb-47fb-32ba-91df-831e1593ac29
(1 row)
+SELECT uuid_generate_v3(uuid_nil(), '\x00ABCDEF'::bytea);
+ uuid_generate_v3
+--------------------------------------
+ ab97c525-de95-3d08-a34a-bdb16bda93ca
+(1 row)
+
SELECT uuid_generate_v5(uuid_ns_dns(), 'www.widgets.com');
uuid_generate_v5
--------------------------------------
21f7f8de-8051-5b89-8680-0195ef798b6a
(1 row)
+SELECT uuid_generate_v5(uuid_nil(), '\x00ABCDEF'::bytea);
+ uuid_generate_v5
+--------------------------------------
+ c52b4615-61e8-522c-a42e-8feb48af3958
+(1 row)
+
SELECT uuid_version_bits(uuid_generate_v4()),
uuid_reserved_bits(uuid_generate_v4());
uuid_version_bits | uuid_reserved_bits
diff --git a/contrib/uuid-ossp/sql/uuid_ossp.sql b/contrib/uuid-ossp/sql/uuid_ossp.sql
index b4237df8847..f5f06d62260 100644
--- a/contrib/uuid-ossp/sql/uuid_ossp.sql
+++ b/contrib/uuid-ossp/sql/uuid_ossp.sql
@@ -67,7 +67,10 @@ SELECT uuid_node(uuid_generate_v1()) <> uuid_node(uuid_generate_v1mc());
SELECT uuid_node(uuid_generate_v1mc()) <> uuid_node(uuid_generate_v1mc());
SELECT uuid_generate_v3(uuid_ns_dns(), 'www.widgets.com');
+SELECT uuid_generate_v3(uuid_nil(), '\x00ABCDEF'::bytea);
+
SELECT uuid_generate_v5(uuid_ns_dns(), 'www.widgets.com');
+SELECT uuid_generate_v5(uuid_nil(), '\x00ABCDEF'::bytea);
SELECT uuid_version_bits(uuid_generate_v4()),
uuid_reserved_bits(uuid_generate_v4());
diff --git a/contrib/uuid-ossp/uuid-ossp--1.1--1.2.sql b/contrib/uuid-ossp/uuid-ossp--1.1--1.2.sql
new file mode 100644
index 00000000000..687d628aa30
--- /dev/null
+++ b/contrib/uuid-ossp/uuid-ossp--1.1--1.2.sql
@@ -0,0 +1,14 @@
+/* contrib/uuid-ossp/uuid-ossp--1.1--1.2.sql */
+
+-- complain if script is sourced in psql, rather than via ALTER EXTENSION
+\echo Use "ALTER EXTENSION uuid-ossp UPDATE TO '1.2'" to load this file. \quit
+
+CREATE FUNCTION uuid_generate_v3(namespace uuid, name bytea)
+RETURNS uuid
+AS 'MODULE_PATHNAME', 'uuid_generate_v3_bytea'
+IMMUTABLE STRICT LANGUAGE C PARALLEL SAFE;
+
+CREATE FUNCTION uuid_generate_v5(namespace uuid, name bytea)
+RETURNS uuid
+AS 'MODULE_PATHNAME', 'uuid_generate_v5_bytea'
+IMMUTABLE STRICT LANGUAGE C PARALLEL SAFE;
diff --git a/contrib/uuid-ossp/uuid-ossp--1.1.sql b/contrib/uuid-ossp/uuid-ossp--1.2.sql
similarity index 82%
rename from contrib/uuid-ossp/uuid-ossp--1.1.sql
rename to contrib/uuid-ossp/uuid-ossp--1.2.sql
index c9cefd73608..a9c211447db 100644
--- a/contrib/uuid-ossp/uuid-ossp--1.1.sql
+++ b/contrib/uuid-ossp/uuid-ossp--1.2.sql
@@ -43,6 +43,11 @@ RETURNS uuid
AS 'MODULE_PATHNAME', 'uuid_generate_v3'
IMMUTABLE STRICT LANGUAGE C PARALLEL SAFE;
+CREATE FUNCTION uuid_generate_v3(namespace uuid, name bytea)
+RETURNS uuid
+AS 'MODULE_PATHNAME', 'uuid_generate_v3_bytea'
+IMMUTABLE STRICT LANGUAGE C PARALLEL SAFE;
+
CREATE FUNCTION uuid_generate_v4()
RETURNS uuid
AS 'MODULE_PATHNAME', 'uuid_generate_v4'
@@ -52,3 +57,8 @@ CREATE FUNCTION uuid_generate_v5(namespace uuid, name text)
RETURNS uuid
AS 'MODULE_PATHNAME', 'uuid_generate_v5'
IMMUTABLE STRICT LANGUAGE C PARALLEL SAFE;
+
+CREATE FUNCTION uuid_generate_v5(namespace uuid, name bytea)
+RETURNS uuid
+AS 'MODULE_PATHNAME', 'uuid_generate_v5_bytea'
+IMMUTABLE STRICT LANGUAGE C PARALLEL SAFE;
diff --git a/contrib/uuid-ossp/uuid-ossp.c b/contrib/uuid-ossp/uuid-ossp.c
index 1ce08555cfb..8e9f5e825d1 100644
--- a/contrib/uuid-ossp/uuid-ossp.c
+++ b/contrib/uuid-ossp/uuid-ossp.c
@@ -123,8 +123,10 @@ PG_FUNCTION_INFO_V1(uuid_ns_x500);
PG_FUNCTION_INFO_V1(uuid_generate_v1);
PG_FUNCTION_INFO_V1(uuid_generate_v1mc);
PG_FUNCTION_INFO_V1(uuid_generate_v3);
+PG_FUNCTION_INFO_V1(uuid_generate_v3_bytea);
PG_FUNCTION_INFO_V1(uuid_generate_v4);
PG_FUNCTION_INFO_V1(uuid_generate_v5);
+PG_FUNCTION_INFO_V1(uuid_generate_v5_bytea);
#ifdef HAVE_UUID_OSSP
@@ -515,6 +517,21 @@ uuid_generate_v3(PG_FUNCTION_ARGS)
Datum
+uuid_generate_v3_bytea(PG_FUNCTION_ARGS)
+{
+ pg_uuid_t *ns = PG_GETARG_UUID_P(0);
+ bytea *name = PG_GETARG_BYTEA_PP(1);
+
+#ifdef HAVE_UUID_OSSP
+ return uuid_generate_v35_internal(UUID_MAKE_V3, ns, name);
+#else
+ return uuid_generate_internal(UUID_MAKE_V3, (unsigned char *) ns,
+ VARDATA_ANY(name), VARSIZE_ANY_EXHDR(name));
+#endif
+}
+
+
+Datum
uuid_generate_v4(PG_FUNCTION_ARGS)
{
return uuid_generate_internal(UUID_MAKE_V4, NULL, NULL, 0);
@@ -534,3 +551,18 @@ uuid_generate_v5(PG_FUNCTION_ARGS)
VARDATA_ANY(name), VARSIZE_ANY_EXHDR(name));
#endif
}
+
+
+Datum
+uuid_generate_v5_bytea(PG_FUNCTION_ARGS)
+{
+ pg_uuid_t *ns = PG_GETARG_UUID_P(0);
+ bytea *name = PG_GETARG_BYTEA_PP(1);
+
+#ifdef HAVE_UUID_OSSP
+ return uuid_generate_v35_internal(UUID_MAKE_V5, ns, name);
+#else
+ return uuid_generate_internal(UUID_MAKE_V5, (unsigned char *) ns,
+ VARDATA_ANY(name), VARSIZE_ANY_EXHDR(name));
+#endif
+}
diff --git a/contrib/uuid-ossp/uuid-ossp.control b/contrib/uuid-ossp/uuid-ossp.control
index 657476c182f..3479b06eff7 100644
--- a/contrib/uuid-ossp/uuid-ossp.control
+++ b/contrib/uuid-ossp/uuid-ossp.control
@@ -1,5 +1,5 @@
# uuid-ossp extension
comment = 'generate universally unique identifiers (UUIDs)'
-default_version = '1.1'
+default_version = '1.2'
module_pathname = '$libdir/uuid-ossp'
relocatable = true
diff --git a/doc/src/sgml/uuid-ossp.sgml b/doc/src/sgml/uuid-ossp.sgml
index 227d4a839c8..235e22578e1 100644
--- a/doc/src/sgml/uuid-ossp.sgml
+++ b/doc/src/sgml/uuid-ossp.sgml
@@ -58,7 +58,11 @@
- uuid_generate_v3(namespace uuid, name text)uuid_generate_v3
+
+ uuid_generate_v3(namespace uuid, name text)
+ uuid_generate_v3(namespace uuid, name bytea)
+ uuid_generate_v3
+
This function generates a version 3 UUID in the given namespace using
@@ -92,7 +96,11 @@ SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');
- uuid_generate_v5(namespace uuid, name text)
+
+ uuid_generate_v5(namespace uuid, name text)
+ uuid_generate_v5(namespace uuid, name bytea)
+ uuid_generate_v5
+
This function generates a version 5 UUID, which works like a version 3