mirror of https://github.com/citusdata/citus.git
Uses object name in cannot distribute object error (#6186)
Object type ids have changed in PG15 because of at least two added objects in the list: OBJECT_PARAMETER_ACL, OBJECT_PUBLICATION_NAMESPACE To avoid different output between pg versions, let's use the object name in the error, and put the object id in the error detail. Relevant PG commits: a0ffa885e478f5eeacc4e250e35ce25a4740c487 5a2832465fd8984d089e8c44c094e6900d987fcdpull/6166/head
parent
91473635db
commit
69ffdbf0e3
|
@ -34,7 +34,8 @@
|
||||||
#include "mb/pg_wchar.h"
|
#include "mb/pg_wchar.h"
|
||||||
#include "parser/parse_type.h"
|
#include "parser/parse_type.h"
|
||||||
|
|
||||||
static void ErrorIfCurrentUserCanNotDistributeObject(ObjectType type,
|
static void ErrorIfCurrentUserCanNotDistributeObject(char *textType,
|
||||||
|
ObjectType type,
|
||||||
ObjectAddress *addr,
|
ObjectAddress *addr,
|
||||||
Node *node,
|
Node *node,
|
||||||
Relation *relation);
|
Relation *relation);
|
||||||
|
@ -372,7 +373,7 @@ PgGetObjectAddress(char *ttype, ArrayType *namearr, ArrayType *argsarr)
|
||||||
&relation, AccessShareLock, false);
|
&relation, AccessShareLock, false);
|
||||||
|
|
||||||
/* CITUS CODE BEGIN */
|
/* CITUS CODE BEGIN */
|
||||||
ErrorIfCurrentUserCanNotDistributeObject(type, &addr, objnode, &relation);
|
ErrorIfCurrentUserCanNotDistributeObject(ttype, type, &addr, objnode, &relation);
|
||||||
|
|
||||||
/* CITUS CODE END */
|
/* CITUS CODE END */
|
||||||
|
|
||||||
|
@ -394,14 +395,16 @@ PgGetObjectAddress(char *ttype, ArrayType *namearr, ArrayType *argsarr)
|
||||||
* distribute object, if not errors out.
|
* distribute object, if not errors out.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
ErrorIfCurrentUserCanNotDistributeObject(ObjectType type, ObjectAddress *addr,
|
ErrorIfCurrentUserCanNotDistributeObject(char *textType, ObjectType type,
|
||||||
Node *node, Relation *relation)
|
ObjectAddress *addr, Node *node,
|
||||||
|
Relation *relation)
|
||||||
{
|
{
|
||||||
Oid userId = GetUserId();
|
Oid userId = GetUserId();
|
||||||
|
|
||||||
if (!SupportedDependencyByCitus(addr))
|
if (!SupportedDependencyByCitus(addr))
|
||||||
{
|
{
|
||||||
ereport(ERROR, (errmsg("Object type %d can not be distributed by Citus", type)));
|
ereport(ERROR, (errmsg("%s object can not be distributed by Citus", textType),
|
||||||
|
errdetail("Object type id is %d", type)));
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|
|
@ -675,7 +675,7 @@ BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
WITH distributed_object_data(typetext, objnames, objargs, distargumentindex, colocationid, force_delegation)
|
WITH distributed_object_data(typetext, objnames, objargs, distargumentindex, colocationid, force_delegation)
|
||||||
AS (VALUES ('publication', ARRAY['publication_test']::text[], ARRAY[]::text[], -1, 0, false))
|
AS (VALUES ('publication', ARRAY['publication_test']::text[], ARRAY[]::text[], -1, 0, false))
|
||||||
SELECT citus_internal_add_object_metadata(typetext, objnames, objargs, distargumentindex, colocationid, force_delegation) FROM distributed_object_data;
|
SELECT citus_internal_add_object_metadata(typetext, objnames, objargs, distargumentindex, colocationid, force_delegation) FROM distributed_object_data;
|
||||||
ERROR: Object type 29 can not be distributed by Citus
|
ERROR: publication object can not be distributed by Citus
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- Show that citus_internal_add_object_metadata checks the priviliges
|
-- Show that citus_internal_add_object_metadata checks the priviliges
|
||||||
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
|
|
Loading…
Reference in New Issue