Fixes for 9.2devel. reported by Josh.

- Since 9.2, RenameRelationInternal() has changed its signature.
- In CREATE FUNCTION, LANGUAGE clause does not accept string.
This commit is contained in:
Masahiko Sakamoto 2012-05-01 06:11:49 +00:00
parent 815dd72774
commit f2fed2415d
2 changed files with 31 additions and 16 deletions

View File

@ -14,7 +14,7 @@ CREATE SCHEMA reorg;
CREATE FUNCTION reorg.version() RETURNS text AS CREATE FUNCTION reorg.version() RETURNS text AS
'MODULE_PATHNAME', 'reorg_version' 'MODULE_PATHNAME', 'reorg_version'
LANGUAGE 'C' IMMUTABLE STRICT; LANGUAGE C IMMUTABLE STRICT;
CREATE AGGREGATE reorg.array_accum ( CREATE AGGREGATE reorg.array_accum (
sfunc = array_append, sfunc = array_append,
@ -46,7 +46,7 @@ LANGUAGE sql STABLE STRICT;
CREATE FUNCTION reorg.get_index_keys(oid, oid) RETURNS text AS CREATE FUNCTION reorg.get_index_keys(oid, oid) RETURNS text AS
'MODULE_PATHNAME', 'reorg_get_index_keys' 'MODULE_PATHNAME', 'reorg_get_index_keys'
LANGUAGE 'C' STABLE STRICT; LANGUAGE C STABLE STRICT;
CREATE FUNCTION reorg.get_create_index_type(oid, name) RETURNS text AS CREATE FUNCTION reorg.get_create_index_type(oid, name) RETURNS text AS
$$ $$
@ -196,11 +196,11 @@ CREATE VIEW reorg.tables AS
CREATE FUNCTION reorg.reorg_indexdef(oid, oid) RETURNS text AS CREATE FUNCTION reorg.reorg_indexdef(oid, oid) RETURNS text AS
'MODULE_PATHNAME', 'reorg_indexdef' 'MODULE_PATHNAME', 'reorg_indexdef'
LANGUAGE 'C' STABLE STRICT; LANGUAGE C STABLE STRICT;
CREATE FUNCTION reorg.reorg_trigger() RETURNS trigger AS CREATE FUNCTION reorg.reorg_trigger() RETURNS trigger AS
'MODULE_PATHNAME', 'reorg_trigger' 'MODULE_PATHNAME', 'reorg_trigger'
LANGUAGE 'C' VOLATILE STRICT SECURITY DEFINER; LANGUAGE C VOLATILE STRICT SECURITY DEFINER;
CREATE FUNCTION reorg.conflicted_triggers(oid) RETURNS SETOF name AS CREATE FUNCTION reorg.conflicted_triggers(oid) RETURNS SETOF name AS
$$ $$
@ -211,7 +211,7 @@ LANGUAGE sql STABLE STRICT;
CREATE FUNCTION reorg.disable_autovacuum(regclass) RETURNS void AS CREATE FUNCTION reorg.disable_autovacuum(regclass) RETURNS void AS
'MODULE_PATHNAME', 'reorg_disable_autovacuum' 'MODULE_PATHNAME', 'reorg_disable_autovacuum'
LANGUAGE 'C' VOLATILE STRICT; LANGUAGE C VOLATILE STRICT;
CREATE FUNCTION reorg.reorg_apply( CREATE FUNCTION reorg.reorg_apply(
sql_peek cstring, sql_peek cstring,
@ -222,14 +222,14 @@ CREATE FUNCTION reorg.reorg_apply(
count integer) count integer)
RETURNS integer AS RETURNS integer AS
'MODULE_PATHNAME', 'reorg_apply' 'MODULE_PATHNAME', 'reorg_apply'
LANGUAGE 'C' VOLATILE; LANGUAGE C VOLATILE;
CREATE FUNCTION reorg.reorg_swap(oid) RETURNS void AS CREATE FUNCTION reorg.reorg_swap(oid) RETURNS void AS
'MODULE_PATHNAME', 'reorg_swap' 'MODULE_PATHNAME', 'reorg_swap'
LANGUAGE 'C' VOLATILE STRICT; LANGUAGE C VOLATILE STRICT;
CREATE FUNCTION reorg.reorg_drop(oid) RETURNS void AS CREATE FUNCTION reorg.reorg_drop(oid) RETURNS void AS
'MODULE_PATHNAME', 'reorg_drop' 'MODULE_PATHNAME', 'reorg_drop'
LANGUAGE 'C' VOLATILE STRICT; LANGUAGE C VOLATILE STRICT;
COMMIT; COMMIT;

View File

@ -70,10 +70,25 @@ must_be_superuser(const char *func)
elog(ERROR, "must be superuser to use %s function", func); elog(ERROR, "must be superuser to use %s function", func);
} }
/* Include an implementation of RenameRelationInternal for old
* versions which don't have one.
*/
#if PG_VERSION_NUM < 80400 #if PG_VERSION_NUM < 80400
static void RenameRelationInternal(Oid myrelid, const char *newrelname, Oid namespaceId); static void RenameRelationInternal(Oid myrelid, const char *newrelname, Oid namespaceId);
#endif #endif
/* The API of RenameRelationInternal() was changed in 9.2.
* Use the RENAME_REL macro for compatibility across versions.
*/
#if PG_VERSION_NUM < 90200
#define RENAME_REL(relid, newrelname) RenameRelationInternal(relid, newrelname, PG_TOAST_NAMESPACE);
#else
#define RENAME_REL(relid, newrelname) RenameRelationInternal(relid, newrelname);
#endif
Datum Datum
reorg_version(PG_FUNCTION_ARGS) reorg_version(PG_FUNCTION_ARGS)
{ {
@ -730,9 +745,9 @@ reorg_swap(PG_FUNCTION_ARGS)
/* rename X to Y */ /* rename X to Y */
snprintf(name, NAMEDATALEN, "pg_toast_%u", oid2); snprintf(name, NAMEDATALEN, "pg_toast_%u", oid2);
RenameRelationInternal(reltoastrelid1, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastrelid1, name);
snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid2); snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid2);
RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastidxid1, name);
CommandCounterIncrement(); CommandCounterIncrement();
} }
else if (reltoastrelid1 != InvalidOid) else if (reltoastrelid1 != InvalidOid)
@ -742,23 +757,23 @@ reorg_swap(PG_FUNCTION_ARGS)
/* rename X to TEMP */ /* rename X to TEMP */
snprintf(name, NAMEDATALEN, "pg_toast_pid%d", pid); snprintf(name, NAMEDATALEN, "pg_toast_pid%d", pid);
RenameRelationInternal(reltoastrelid1, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastrelid1, name);
snprintf(name, NAMEDATALEN, "pg_toast_pid%d_index", pid); snprintf(name, NAMEDATALEN, "pg_toast_pid%d_index", pid);
RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastidxid1, name);
CommandCounterIncrement(); CommandCounterIncrement();
/* rename Y to X */ /* rename Y to X */
snprintf(name, NAMEDATALEN, "pg_toast_%u", oid); snprintf(name, NAMEDATALEN, "pg_toast_%u", oid);
RenameRelationInternal(reltoastrelid2, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastrelid2, name);
snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid); snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid);
RenameRelationInternal(reltoastidxid2, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastidxid2, name);
CommandCounterIncrement(); CommandCounterIncrement();
/* rename TEMP to Y */ /* rename TEMP to Y */
snprintf(name, NAMEDATALEN, "pg_toast_%u", oid2); snprintf(name, NAMEDATALEN, "pg_toast_%u", oid2);
RenameRelationInternal(reltoastrelid1, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastrelid1, name);
snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid2); snprintf(name, NAMEDATALEN, "pg_toast_%u_index", oid2);
RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE); RENAME_REL(reltoastidxid1, name);
CommandCounterIncrement(); CommandCounterIncrement();
} }