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:
parent
815dd72774
commit
f2fed2415d
@ -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;
|
||||||
|
31
lib/reorg.c
31
lib/reorg.c
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user