| CREATE RESOURCE GROUP rg_test_catalog WITH (CONCURRENCY=2, CPU_MAX_PERCENT=10); |
| CREATE |
| CREATE ROLE role_test_catalog RESOURCE GROUP rg_test_catalog; |
| CREATE |
| |
| CREATE FUNCTION rg_test_udf() RETURNS integer AS $$ return 1 $$ LANGUAGE plpython3u; |
| CREATE |
| |
| -- take 1 slot |
| 1: SET ROLE role_test_catalog; |
| SET |
| 1: BEGIN; |
| BEGIN |
| |
| -- take another slot |
| 2: SET ROLE role_test_catalog; |
| SET |
| 2: BEGIN; |
| BEGIN |
| |
| -- two slot have all been taken, so this query will be hung up. |
| 3: SET ROLE role_test_catalog; |
| SET |
| 3&: BEGIN; <waiting ...> |
| |
| -- It's a catalog only query, so it will be bypassed. |
| 4: SET ROLE role_test_catalog; |
| SET |
| 4: SELECT 1 FROM pg_catalog.pg_rules; |
| ?column? |
| ---------- |
| 1 |
| 1 |
| (2 rows) |
| |
| -- It's a udf only query, will be hung up. |
| -- Because there is no RangeVar, it doesn't belong to catalog only query. |
| 5: SET ROLE role_test_catalog; |
| SET |
| 5&: SELECT rg_test_udf(); <waiting ...> |
| |
| -- turn of bypass catalog query |
| 6: SET ROLE role_test_catalog; |
| SET |
| 6: SET gp_resource_group_bypass_catalog_query = false; |
| SET |
| 6&: SELECT 1 FROM pg_catalog.pg_rules; <waiting ...> |
| |
| 1: COMMIT; |
| COMMIT |
| 2: COMMIT; |
| COMMIT |
| 3<: <... completed> |
| BEGIN |
| 3: COMMIT; |
| COMMIT |
| 5<: <... completed> |
| rg_test_udf |
| ------------- |
| 1 |
| (1 row) |
| 5: COMMIT; |
| COMMIT |
| 6<: <... completed> |
| ?column? |
| ---------- |
| 1 |
| 1 |
| (2 rows) |
| |
| -- cleanup |
| -- start_ignore |
| DROP ROLE role_test_catalog; |
| DROP RESOURCE GROUP rg_test_catalog; |
| DROP FUNCTION rg_test_udf; |
| -- end_ignore |