mirror of https://github.com/citusdata/citus.git
Add skip_qualify_public param to shard_name() to allow qualifying for "public" schema (#8014)
DESCRIPTION: Adds skip_qualify_public param to `shard_name()` UDF to allow qualifying for "public" schema when needed.pull/7994/merge
parent
5e37fe0c46
commit
55a0d1f730
|
@ -962,6 +962,7 @@ shard_name(PG_FUNCTION_ARGS)
|
||||||
|
|
||||||
Oid relationId = PG_GETARG_OID(0);
|
Oid relationId = PG_GETARG_OID(0);
|
||||||
int64 shardId = PG_GETARG_INT64(1);
|
int64 shardId = PG_GETARG_INT64(1);
|
||||||
|
bool skipQualifyPublic = PG_GETARG_BOOL(2);
|
||||||
|
|
||||||
char *qualifiedName = NULL;
|
char *qualifiedName = NULL;
|
||||||
|
|
||||||
|
@ -991,7 +992,7 @@ shard_name(PG_FUNCTION_ARGS)
|
||||||
Oid schemaId = get_rel_namespace(relationId);
|
Oid schemaId = get_rel_namespace(relationId);
|
||||||
char *schemaName = get_namespace_name(schemaId);
|
char *schemaName = get_namespace_name(schemaId);
|
||||||
|
|
||||||
if (strncmp(schemaName, "public", NAMEDATALEN) == 0)
|
if (skipQualifyPublic && strncmp(schemaName, "public", NAMEDATALEN) == 0)
|
||||||
{
|
{
|
||||||
qualifiedName = (char *) quote_identifier(relationName);
|
qualifiedName = (char *) quote_identifier(relationName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,3 +51,10 @@ DROP VIEW IF EXISTS pg_catalog.citus_lock_waits;
|
||||||
#include "udfs/citus_stat_counters/13.1-1.sql"
|
#include "udfs/citus_stat_counters/13.1-1.sql"
|
||||||
#include "udfs/citus_stat_counters_reset/13.1-1.sql"
|
#include "udfs/citus_stat_counters_reset/13.1-1.sql"
|
||||||
#include "udfs/citus_nodes/13.1-1.sql"
|
#include "udfs/citus_nodes/13.1-1.sql"
|
||||||
|
|
||||||
|
-- Since shard_name/13.1-1.sql first drops the function and then creates it, we first
|
||||||
|
-- need to drop citus_shards view since that view depends on this function. And immediately
|
||||||
|
-- after creating the function, we recreate citus_shards view again.
|
||||||
|
DROP VIEW pg_catalog.citus_shards;
|
||||||
|
#include "udfs/shard_name/13.1-1.sql"
|
||||||
|
#include "udfs/citus_shards/12.0-1.sql"
|
||||||
|
|
|
@ -46,3 +46,24 @@ DROP VIEW pg_catalog.citus_stat_counters;
|
||||||
DROP FUNCTION pg_catalog.citus_stat_counters(oid);
|
DROP FUNCTION pg_catalog.citus_stat_counters(oid);
|
||||||
DROP FUNCTION pg_catalog.citus_stat_counters_reset(oid);
|
DROP FUNCTION pg_catalog.citus_stat_counters_reset(oid);
|
||||||
DROP VIEW IF EXISTS pg_catalog.citus_nodes;
|
DROP VIEW IF EXISTS pg_catalog.citus_nodes;
|
||||||
|
|
||||||
|
-- Definition of shard_name() prior to this release doesn't have a separate SQL file
|
||||||
|
-- because it's quite an old UDF that its prior definition(s) was(were) squashed into
|
||||||
|
-- citus--8.0-1.sql. For this reason, to downgrade it, here we directly execute its old
|
||||||
|
-- definition instead of including it from such a separate file.
|
||||||
|
--
|
||||||
|
-- And before dropping and creating the function, we also need to drop citus_shards view
|
||||||
|
-- since it depends on it. And immediately after creating the function, we recreate
|
||||||
|
-- citus_shards view again.
|
||||||
|
|
||||||
|
DROP VIEW pg_catalog.citus_shards;
|
||||||
|
|
||||||
|
DROP FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint, skip_qualify_public boolean);
|
||||||
|
CREATE FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint)
|
||||||
|
RETURNS text
|
||||||
|
LANGUAGE C STABLE STRICT
|
||||||
|
AS 'MODULE_PATHNAME', $$shard_name$$;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint)
|
||||||
|
IS 'returns schema-qualified, shard-extended identifier of object name';
|
||||||
|
|
||||||
|
#include "../udfs/citus_shards/12.0-1.sql"
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- skip_qualify_public is set to true by default just for backward compatibility
|
||||||
|
DROP FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint);
|
||||||
|
CREATE FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint, skip_qualify_public boolean DEFAULT true)
|
||||||
|
RETURNS text
|
||||||
|
LANGUAGE C STABLE STRICT
|
||||||
|
AS 'MODULE_PATHNAME', $$shard_name$$;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint, skip_qualify_public boolean)
|
||||||
|
IS 'returns schema-qualified, shard-extended identifier of object name';
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- skip_qualify_public is set to true by default just for backward compatibility
|
||||||
|
DROP FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint);
|
||||||
|
CREATE FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint, skip_qualify_public boolean DEFAULT true)
|
||||||
|
RETURNS text
|
||||||
|
LANGUAGE C STABLE STRICT
|
||||||
|
AS 'MODULE_PATHNAME', $$shard_name$$;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.shard_name(object_name regclass, shard_id bigint, skip_qualify_public boolean)
|
||||||
|
IS 'returns schema-qualified, shard-extended identifier of object name';
|
|
@ -33,5 +33,33 @@ SELECT * FROM citus_shards;
|
||||||
t1 | 99456903 | citus_shards.t1_99456903 | distributed | 456900 | localhost | 57638 | 8192
|
t1 | 99456903 | citus_shards.t1_99456903 | distributed | 456900 | localhost | 57638 | 8192
|
||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
|
SET search_path TO public;
|
||||||
|
CREATE TABLE t3 (i int);
|
||||||
|
SELECT citus_add_local_table_to_metadata('t3');
|
||||||
|
citus_add_local_table_to_metadata
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT shard_name('t3', shardid) FROM pg_dist_shard WHERE logicalrelid = 't3'::regclass;
|
||||||
|
shard_name
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t3_99456908
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT shard_name('t3', shardid, true) FROM pg_dist_shard WHERE logicalrelid = 't3'::regclass;
|
||||||
|
shard_name
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t3_99456908
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT shard_name('t3', shardid, false) FROM pg_dist_shard WHERE logicalrelid = 't3'::regclass;
|
||||||
|
shard_name
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
public.t3_99456908
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
DROP TABLE t3;
|
||||||
|
SET search_path TO citus_shards;
|
||||||
SET client_min_messages TO WARNING;
|
SET client_min_messages TO WARNING;
|
||||||
DROP SCHEMA citus_shards CASCADE;
|
DROP SCHEMA citus_shards CASCADE;
|
||||||
|
|
|
@ -1455,6 +1455,7 @@ SELECT * FROM multi_extension.print_extension_changes();
|
||||||
previous_object | current_object
|
previous_object | current_object
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function citus_unmark_object_distributed(oid,oid,integer) void |
|
function citus_unmark_object_distributed(oid,oid,integer) void |
|
||||||
|
function shard_name(regclass,bigint) text |
|
||||||
| function citus_internal.acquire_citus_advisory_object_class_lock(integer,cstring) void
|
| function citus_internal.acquire_citus_advisory_object_class_lock(integer,cstring) void
|
||||||
| function citus_internal.add_colocation_metadata(integer,integer,integer,regtype,oid) void
|
| function citus_internal.add_colocation_metadata(integer,integer,integer,regtype,oid) void
|
||||||
| function citus_internal.add_object_metadata(text,text[],text[],integer,integer,boolean) void
|
| function citus_internal.add_object_metadata(text,text[],text[],integer,integer,boolean) void
|
||||||
|
@ -1483,9 +1484,10 @@ SELECT * FROM multi_extension.print_extension_changes();
|
||||||
| function citus_stat_counters(oid) SETOF record
|
| function citus_stat_counters(oid) SETOF record
|
||||||
| function citus_stat_counters_reset(oid) void
|
| function citus_stat_counters_reset(oid) void
|
||||||
| function citus_unmark_object_distributed(oid,oid,integer,boolean) void
|
| function citus_unmark_object_distributed(oid,oid,integer,boolean) void
|
||||||
|
| function shard_name(regclass,bigint,boolean) text
|
||||||
| view citus_nodes
|
| view citus_nodes
|
||||||
| view citus_stat_counters
|
| view citus_stat_counters
|
||||||
(31 rows)
|
(33 rows)
|
||||||
|
|
||||||
DROP TABLE multi_extension.prev_objects, multi_extension.extension_diff;
|
DROP TABLE multi_extension.prev_objects, multi_extension.extension_diff;
|
||||||
-- show running version
|
-- show running version
|
||||||
|
|
|
@ -289,7 +289,7 @@ ORDER BY 1;
|
||||||
function run_command_on_placements(regclass,text,boolean)
|
function run_command_on_placements(regclass,text,boolean)
|
||||||
function run_command_on_shards(regclass,text,boolean)
|
function run_command_on_shards(regclass,text,boolean)
|
||||||
function run_command_on_workers(text,boolean)
|
function run_command_on_workers(text,boolean)
|
||||||
function shard_name(regclass,bigint)
|
function shard_name(regclass,bigint,boolean)
|
||||||
function start_metadata_sync_to_all_nodes()
|
function start_metadata_sync_to_all_nodes()
|
||||||
function start_metadata_sync_to_node(text,integer)
|
function start_metadata_sync_to_node(text,integer)
|
||||||
function stop_metadata_sync_to_node(text,integer,boolean)
|
function stop_metadata_sync_to_node(text,integer,boolean)
|
||||||
|
|
|
@ -13,5 +13,16 @@ INSERT INTO t1 SELECT generate_series(1, 100);
|
||||||
INSERT INTO "t with space" SELECT generate_series(1, 1000);
|
INSERT INTO "t with space" SELECT generate_series(1, 1000);
|
||||||
SELECT * FROM citus_shards;
|
SELECT * FROM citus_shards;
|
||||||
|
|
||||||
|
SET search_path TO public;
|
||||||
|
CREATE TABLE t3 (i int);
|
||||||
|
SELECT citus_add_local_table_to_metadata('t3');
|
||||||
|
|
||||||
|
SELECT shard_name('t3', shardid) FROM pg_dist_shard WHERE logicalrelid = 't3'::regclass;
|
||||||
|
SELECT shard_name('t3', shardid, true) FROM pg_dist_shard WHERE logicalrelid = 't3'::regclass;
|
||||||
|
SELECT shard_name('t3', shardid, false) FROM pg_dist_shard WHERE logicalrelid = 't3'::regclass;
|
||||||
|
|
||||||
|
DROP TABLE t3;
|
||||||
|
SET search_path TO citus_shards;
|
||||||
|
|
||||||
SET client_min_messages TO WARNING;
|
SET client_min_messages TO WARNING;
|
||||||
DROP SCHEMA citus_shards CASCADE;
|
DROP SCHEMA citus_shards CASCADE;
|
||||||
|
|
Loading…
Reference in New Issue