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
'MODULE_PATHNAME', 'reorg_version'
LANGUAGE 'C' IMMUTABLE STRICT;
LANGUAGE C IMMUTABLE STRICT;
CREATE AGGREGATE reorg.array_accum (
sfunc = array_append,
@ -46,7 +46,7 @@ LANGUAGE sql STABLE STRICT;
CREATE FUNCTION reorg.get_index_keys(oid, oid) RETURNS text AS
'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
$$
@ -196,11 +196,11 @@ CREATE VIEW reorg.tables AS
CREATE FUNCTION reorg.reorg_indexdef(oid, oid) RETURNS text AS
'MODULE_PATHNAME', 'reorg_indexdef'
LANGUAGE 'C' STABLE STRICT;
LANGUAGE C STABLE STRICT;
CREATE FUNCTION reorg.reorg_trigger() RETURNS trigger AS
'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
$$
@ -211,7 +211,7 @@ LANGUAGE sql STABLE STRICT;
CREATE FUNCTION reorg.disable_autovacuum(regclass) RETURNS void AS
'MODULE_PATHNAME', 'reorg_disable_autovacuum'
LANGUAGE 'C' VOLATILE STRICT;
LANGUAGE C VOLATILE STRICT;
CREATE FUNCTION reorg.reorg_apply(
sql_peek cstring,
@ -222,14 +222,14 @@ CREATE FUNCTION reorg.reorg_apply(
count integer)
RETURNS integer AS
'MODULE_PATHNAME', 'reorg_apply'
LANGUAGE 'C' VOLATILE;
LANGUAGE C VOLATILE;
CREATE FUNCTION reorg.reorg_swap(oid) RETURNS void AS
'MODULE_PATHNAME', 'reorg_swap'
LANGUAGE 'C' VOLATILE STRICT;
LANGUAGE C VOLATILE STRICT;
CREATE FUNCTION reorg.reorg_drop(oid) RETURNS void AS
'MODULE_PATHNAME', 'reorg_drop'
LANGUAGE 'C' VOLATILE STRICT;
LANGUAGE C VOLATILE STRICT;
COMMIT;

View File

@ -70,10 +70,25 @@ must_be_superuser(const char *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
static void RenameRelationInternal(Oid myrelid, const char *newrelname, Oid namespaceId);
#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
reorg_version(PG_FUNCTION_ARGS)
{
@ -730,9 +745,9 @@ reorg_swap(PG_FUNCTION_ARGS)
/* rename X to Y */
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);
RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE);
RENAME_REL(reltoastidxid1, name);
CommandCounterIncrement();
}
else if (reltoastrelid1 != InvalidOid)
@ -742,23 +757,23 @@ reorg_swap(PG_FUNCTION_ARGS)
/* rename X to TEMP */
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);
RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE);
RENAME_REL(reltoastidxid1, name);
CommandCounterIncrement();
/* rename Y to X */
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);
RenameRelationInternal(reltoastidxid2, name, PG_TOAST_NAMESPACE);
RENAME_REL(reltoastidxid2, name);
CommandCounterIncrement();
/* rename TEMP to Y */
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);
RenameRelationInternal(reltoastidxid1, name, PG_TOAST_NAMESPACE);
RENAME_REL(reltoastidxid1, name);
CommandCounterIncrement();
}