blob: 662128bad35a9f19d17c134df2de2f8b4b973734 [file] [log] [blame]
--
-- Test the resource group name convention.
--
-- Resource group names follow the general object name convention:
-- https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
--
-- Besides that there are 3 reserved names:
-- * default_group, admin_group: names of the 2 default resource groups;
-- * none: a special name usually used in ALTER ROLE command to reset
-- to the proper default resource group;
--
-- This case is put under isolation2 dir as other resource group cases,
-- although it does not require any extended feature of the isolation2
-- test framework.
--
--
-- setup
--
CREATE OR REPLACE VIEW rg_name_view AS
SELECT S.rsgname, C.concurrency
FROM gp_toolkit.gp_resgroup_config C, gp_toolkit.gp_resgroup_status S
WHERE C.groupid = S.groupid
AND C.groupname != 'default_group'
AND C.groupname != 'admin_group'
ORDER BY C.groupid;
-- TODO: need to cleanup all existing resgroups
--
-- positive
--
-- by default resgroup names have the form of [_a-zA-Z][_a-zA-Z0-9]*
CREATE RESOURCE GROUP rgNameTest01 WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP rgNameTest01 SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP rgNameTest01;
CREATE RESOURCE GROUP __rg_name_test_01__ WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP __rg_name_test_01__ SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP __rg_name_test_01__;
-- min length is 1 character
CREATE RESOURCE GROUP Z WITH (cpu_rate_limit=10, memory_limit=10);
DROP RESOURCE GROUP Z;
-- max length is 63 characters
CREATE RESOURCE GROUP max012345678901234567890123456789012345678901234567890123456789 WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP max012345678901234567890123456789012345678901234567890123456789 SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP max012345678901234567890123456789012345678901234567890123456789;
-- characters exceed the max length are ignored
CREATE RESOURCE GROUP max012345678901234567890123456789012345678901234567890123456789further WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP max012345678901234567890123456789012345678901234567890123456789are SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP max012345678901234567890123456789012345678901234567890123456789ignored;
-- special characters are allowed with double quotation marks
-- white spaces
CREATE RESOURCE GROUP "newlines
s p a c e s
t a b s" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "newlines
s p a c e s
t a b s" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "newlines
s p a c e s
t a b s";
-- punctuations
CREATE RESOURCE GROUP "!#$%&`()*+,-./:;<=>?@[]^_{|}~" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "!#$%&`()*+,-./:;<=>?@[]^_{|}~" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "!#$%&`()*+,-./:;<=>?@[]^_{|}~";
-- quotation marks
CREATE RESOURCE GROUP "'' are 2 single quotation marks" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "'' are 2 single quotation marks" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "'' are 2 single quotation marks";
CREATE RESOURCE GROUP """ is 1 double quotation mark" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP """ is 1 double quotation mark" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP """ is 1 double quotation mark";
-- nothing special with leading character
CREATE RESOURCE GROUP "0 as prefix" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "0 as prefix" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "0 as prefix";
CREATE RESOURCE GROUP " leading space" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP " leading space" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP " leading space";
-- backslash is not used as the escape character
CREATE RESOURCE GROUP "\\ are two backslashes" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "\\ are two backslashes" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "\\ are two backslashes";
-- below are octal, hex and unicode representations of "rg1"
CREATE RESOURCE GROUP "\o162\o147\o61" WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP "\x72\x67\x31" WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP "\u0072\u0067\u0031" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "\o162\o147\o61" SET concurrency 2;
ALTER RESOURCE GROUP "\x72\x67\x31" SET concurrency 2;
ALTER RESOURCE GROUP "\u0072\u0067\u0031" SET concurrency 2;
SELECT * FROM rg_name_view;
-- but as \o, \x and \u are not supported,
-- so they are just 3 different names,
-- none of them equals to "rg1".
DROP RESOURCE GROUP "rg1";
DROP RESOURCE GROUP "\o162\o147\o61";
DROP RESOURCE GROUP "\x72\x67\x31";
DROP RESOURCE GROUP "\u0072\u0067\u0031";
-- unicode escapes are supported
CREATE RESOURCE GROUP U&"\0441\043B\043E\043D" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP U&"\0441\043B\043E\043D" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP U&"\0441\043B\043E\043D";
-- unicode representation of "rg1"
CREATE RESOURCE GROUP U&"\0072\0067\0031" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "rg1" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "rg1";
-- CJK characters are allowed with or without double quotation marks
CREATE RESOURCE GROUP 资源组 WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "资源组" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP 资源组;
CREATE RESOURCE GROUP リソース・グループ WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "リソース・グループ" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP リソース・グループ;
CREATE RESOURCE GROUP 자원그룹 WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "자원그룹" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP 자원그룹;
-- names are case sensitive,
-- but are always converted to lower case unless around with quotation marks
CREATE RESOURCE GROUP "RG_NAME_TEST" WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP rg_Name_Test WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP "rg_name_test" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP Rg_NaMe_TeSt SET concurrency 2;
ALTER RESOURCE GROUP "RG_NAME_TEST" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "RG_NAME_TEST";
DROP RESOURCE GROUP RG_nAME_tEST;
-- reserved names are all lower case: "default_group", "admin_group", "none",
-- they can be used by users with at least one upper case character.
CREATE RESOURCE GROUP "None" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "None" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "None";
CREATE RESOURCE GROUP "NONE" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "NONE" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "NONE";
CREATE RESOURCE GROUP "DEFAULT_GROup" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "DEFAULT_GROup" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "DEFAULT_GROup";
CREATE RESOURCE GROUP "ADMIN_GROUP" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "ADMIN_GROUP" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "ADMIN_GROUP";
CREATE RESOURCE GROUP "with" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "with" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "with";
CREATE RESOURCE GROUP "WITH" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "WITH" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "WITH";
CREATE RESOURCE GROUP "group" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "group" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "group";
CREATE RESOURCE GROUP "create" WITH (cpu_rate_limit=10, memory_limit=10);
ALTER RESOURCE GROUP "create" SET concurrency 2;
SELECT * FROM rg_name_view;
DROP RESOURCE GROUP "create";
--
-- negative
--
-- does not support single quotation marks around the name
CREATE RESOURCE GROUP 'must_fail' WITH (cpu_rate_limit=10, memory_limit=10);
-- does not support leading numbers
CREATE RESOURCE GROUP 0_must_fail WITH (cpu_rate_limit=10, memory_limit=10);
-- reserved names are not allowed even with double quotation marks
CREATE RESOURCE GROUP "default_group" WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP "admin_group" WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP "none" WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP default_group WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP admin_group WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP none WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP DEFAULT_GROUP WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP Admin_Group WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP NONE WITH (cpu_rate_limit=10, memory_limit=10);
-- keywords are not allowed without quotation marks
CREATE RESOURCE GROUP with WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP WITH WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP group WITH (cpu_rate_limit=10, memory_limit=10);
CREATE RESOURCE GROUP CREATE WITH (cpu_rate_limit=10, memory_limit=10);
-- min length is 1 character
CREATE RESOURCE GROUP "" WITH (cpu_rate_limit=10, memory_limit=10);