consider mix case and fix test case of alter system set

This commit is contained in:
gentle_hu 2021-01-19 22:54:57 +08:00
parent 1dc81c0e17
commit 3e405aee97
6 changed files with 288 additions and 113 deletions

View File

@ -540,8 +540,8 @@ static bool check_inlist2joininfo(char** newval, void** extra, GucSource source)
static void assign_inlist2joininfo(const char* newval, void* extra); static void assign_inlist2joininfo(const char* newval, void* extra);
static bool check_replication_type(int* newval, void** extra, GucSource source); static bool check_replication_type(int* newval, void** extra, GucSource source);
static bool isOptLineCommented(char* optLine); static bool isOptLineCommented(char* optLine);
static bool isMatchOptionName( static bool isMatchOptionName(char* optLine, const char* paraName,
char* optLine, const char* paraName, int paraLength, int* paraOffset, int* valueLength, int* valueOffset); int paraLength, int* paraOffset, int* valueLength, int* valueOffset, bool ignore_case);
static const char* logging_module_guc_show(void); static const char* logging_module_guc_show(void);
static bool logging_module_check(char** newval, void** extra, GucSource source); static bool logging_module_check(char** newval, void** extra, GucSource source);
@ -586,7 +586,8 @@ static void FinishAlterSystemSet(GucContext context);
static void ConfFileNameCat(char* ConfFileName, char* ConfTmpFileName, static void ConfFileNameCat(char* ConfFileName, char* ConfTmpFileName,
char* ConfTmpBakFileName, char* ConfLockFileName); char* ConfTmpBakFileName, char* ConfLockFileName);
static void WriteAlterSystemSetGucFile(char* ConfFileName, char** opt_lines, ConfFileLock* filelock); static void WriteAlterSystemSetGucFile(char* ConfFileName, char** opt_lines, ConfFileLock* filelock);
static char** LockAndReadConfFile(char* ConfFileName, char* ConfLockFileName, ConfFileLock* filelock); static char** LockAndReadConfFile(char* ConfFileName, char* ConfTmpFileName, char* ConfLockFileName,
ConfFileLock* filelock);
#endif #endif
inline void scape_space(char **pp) inline void scape_space(char **pp)
{ {
@ -609,8 +610,8 @@ inline void scape_space(char **pp)
* Returns: * Returns:
* True, iff the option name is in the configure file; else false. * True, iff the option name is in the configure file; else false.
*/ */
static bool isMatchOptionName( static bool isMatchOptionName(char* optLine, const char* paraName,
char* optLine, const char* paraName, int paraLength, int* paraOffset, int* valueLength, int* valueOffset) int paraLength, int* paraOffset, int* valueLength, int* valueOffset, bool ignore_case)
{ {
char* p = NULL; char* p = NULL;
char* q = NULL; char* q = NULL;
@ -628,7 +629,9 @@ static bool isMatchOptionName(
/* Skip all the blanks after '#' and before the paraName */ /* Skip all the blanks after '#' and before the paraName */
scape_space(&p); scape_space(&p);
if (strncmp(p, paraName, paraLength) != 0) { if (ignore_case && strncasecmp(p, paraName, paraLength) != 0) {
return false;
} else if (!ignore_case && strncmp(p, paraName, paraLength) != 0) {
return false; return false;
} }
@ -13126,7 +13129,7 @@ static void replace_config_value(char** optlines, char* name, char* value, confi
} }
securec_check_ss(rc, "\0", "\0"); securec_check_ss(rc, "\0", "\0");
index = find_guc_option(optlines, name, NULL, NULL, &optvalue_off, &optvalue_len); index = find_guc_option(optlines, name, NULL, NULL, &optvalue_off, &optvalue_len, true);
/* add or replace */ /* add or replace */
if (index == INVALID_LINES_IDX) { if (index == INVALID_LINES_IDX) {
@ -13163,7 +13166,7 @@ static void CheckAlterSystemSetPrivilege(const char* name)
} else { } else {
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
(errmsg("Permission denied.")))); (errmsg("Permission denied, must be sysadmin to execute ALTER SYSTEM SET command."))));
} }
static char* blackList[] = { static char* blackList[] = {
@ -13310,17 +13313,31 @@ static void WriteAlterSystemSetGucFile(char* ConfFileName, char** opt_lines, Con
} }
} }
static char** LockAndReadConfFile(char* ConfFileName, char* ConfLockFileName, ConfFileLock* filelock) static char** LockAndReadConfFile(char* ConfFileName, char* ConfTmpFileName, char* ConfLockFileName,
ConfFileLock* filelock)
{ {
struct stat st; struct stat st;
char** opt_lines = NULL; char** opt_lines = NULL;
if (stat(ConfFileName, &st) == 0 && get_file_lock(ConfLockFileName, filelock) == CODE_OK) { char* file = NULL;
opt_lines = read_guc_file(ConfFileName);
if (stat(ConfFileName, &st) == 0) {
file = ConfFileName;
} else if (stat(ConfTmpFileName, &st) == 0) {
file = ConfTmpFileName;
}
if (file != NULL && S_ISREG(st.st_mode) && get_file_lock(file, filelock) == CODE_OK) {
opt_lines = read_guc_file(file);
} else { } else {
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_FILE_READ_FAILED), (errcode(ERRCODE_FILE_READ_FAILED), errmsg("Can not open configure file.")));
errmsg("File does not exits or it is being used.Can not open file: %s.", ConfFileName)));
} }
if (opt_lines == NULL) {
release_file_lock(filelock);
ereport(ERROR, (errcode(ERRCODE_FILE_READ_FAILED), errmsg("Read configure file falied.")));
}
return opt_lines; return opt_lines;
} }
@ -13333,12 +13350,12 @@ static char** LockAndReadConfFile(char* ConfFileName, char* ConfLockFileName, Co
* *
* The configuration parameters are written to a temporary * The configuration parameters are written to a temporary
* file then renamed to the final name. The template for the * file then renamed to the final name. The template for the
* temporary file is postgresql.auto.conf.temp. * temporary file is postgresql.conf.bak
* *
* An LWLock is used to serialize writing to the same file. * An LWLock is used to serialize writing to the same file.
* *
* In case of an error, we leave the original automatic * In case of an error, we leave the original automatic
* configuration file (postgresql.auto.conf) intact. * configuration file (postgresql.conf.bak) intact.
*/ */
void AlterSystemSetConfigFile(AlterSystemStmt * altersysstmt) void AlterSystemSetConfigFile(AlterSystemStmt * altersysstmt)
{ {
@ -13364,7 +13381,7 @@ void AlterSystemSetConfigFile(AlterSystemStmt * altersysstmt)
* temporary file and then rename it to postgresql.auto.conf. In case * temporary file and then rename it to postgresql.auto.conf. In case
* there exists a temp file from previous crash, that can be reused. * there exists a temp file from previous crash, that can be reused.
*/ */
opt_lines = LockAndReadConfFile(ConfFileName, ConfLockFileName, &filelock); opt_lines = LockAndReadConfFile(ConfFileName, ConfTmpFileName, ConfLockFileName, &filelock);
/* /*
* replace with new value if the configuration parameter already * replace with new value if the configuration parameter already
@ -18053,7 +18070,7 @@ ErrCode copy_guc_lines(char** copy_to_line, char** optlines, const char** opt_na
if (optlines != NULL) { if (optlines != NULL) {
for (i = 0; i < RESERVE_SIZE; i++) { for (i = 0; i < RESERVE_SIZE; i++) {
opt_name_index = find_guc_option(optlines, opt_name[i], NULL, NULL, &optvalue_off, &optvalue_len); opt_name_index = find_guc_option(optlines, opt_name[i], NULL, NULL, &optvalue_off, &optvalue_len, false);
if (INVALID_LINES_IDX != opt_name_index) { if (INVALID_LINES_IDX != opt_name_index) {
errno_t errorno = EOK; errno_t errorno = EOK;
opt_name_len = strlen(optlines[opt_name_index]) + 1; opt_name_len = strlen(optlines[opt_name_index]) + 1;
@ -18099,7 +18116,7 @@ void modify_guc_lines(char*** guc_optlines, const char** opt_name, char** copy_f
ereport(LOG, (errmsg("configuration file has not data"))); ereport(LOG, (errmsg("configuration file has not data")));
} else { } else {
for (int i = 0; i < RESERVE_SIZE; i++) { for (int i = 0; i < RESERVE_SIZE; i++) {
opt_name_index = find_guc_option(optlines, opt_name[i], NULL, NULL, &optvalue_off, &optvalue_len); opt_name_index = find_guc_option(optlines, opt_name[i], NULL, NULL, &optvalue_off, &optvalue_len, false);
if (NULL != copy_from_line[i]) { if (NULL != copy_from_line[i]) {
if (INVALID_LINES_IDX != opt_name_index) { if (INVALID_LINES_IDX != opt_name_index) {
pfree(optlines[opt_name_index]); pfree(optlines[opt_name_index]);
@ -18153,7 +18170,7 @@ void comment_guc_lines(char** optlines, const char** opt_name)
ereport(LOG, (errmsg("configuration file has not data"))); ereport(LOG, (errmsg("configuration file has not data")));
} else { } else {
for (int i = 0; i < RESERVE_SIZE; i++) { for (int i = 0; i < RESERVE_SIZE; i++) {
opt_name_index = find_guc_option(optlines, opt_name[i], NULL, NULL, &optvalue_off, &optvalue_len); opt_name_index = find_guc_option(optlines, opt_name[i], NULL, NULL, &optvalue_off, &optvalue_len, false);
if (opt_name_index != INVALID_LINES_IDX) { if (opt_name_index != INVALID_LINES_IDX) {
/* Skip all the blanks at the begin of the optLine */ /* Skip all the blanks at the begin of the optLine */
char *p = optlines[opt_name_index]; char *p = optlines[opt_name_index];
@ -18228,8 +18245,8 @@ int add_guc_optlines_to_buffer(char** optlines, char** buffer)
* Description : find the line info of the specified parameter in file * Description : find the line info of the specified parameter in file
* Notes : * Notes :
*/ */
int find_guc_option( int find_guc_option(char** optlines, const char* opt_name,
char** optlines, const char* opt_name, int* name_offset, int* name_len, int* value_offset, int* value_len) int* name_offset, int* name_len, int* value_offset, int* value_len, bool ignore_case)
{ {
bool isMatched = false; bool isMatched = false;
int i = 0; int i = 0;
@ -18247,7 +18264,8 @@ int find_guc_option(
/* The first loop is to deal with the lines not commented by '#' */ /* The first loop is to deal with the lines not commented by '#' */
for (i = 0; optlines[i] != NULL; i++) { for (i = 0; optlines[i] != NULL; i++) {
if (!isOptLineCommented(optlines[i])) { if (!isOptLineCommented(optlines[i])) {
isMatched = isMatchOptionName(optlines[i], opt_name, paramlen, name_offset, value_len, value_offset); isMatched = isMatchOptionName(optlines[i], opt_name, paramlen, name_offset,
value_len, value_offset, ignore_case);
if (isMatched) { if (isMatched) {
matchtimes++; matchtimes++;
targetline = i; targetline = i;
@ -18270,7 +18288,8 @@ int find_guc_option(
matchtimes = 0; matchtimes = 0;
for (i = 0; optlines[i] != NULL; i++) { for (i = 0; optlines[i] != NULL; i++) {
if (isOptLineCommented(optlines[i])) { if (isOptLineCommented(optlines[i])) {
isMatched = isMatchOptionName(optlines[i], opt_name, paramlen, name_offset, value_len, value_offset); isMatched = isMatchOptionName(optlines[i], opt_name, paramlen, name_offset,
value_len, value_offset, ignore_case);
if (isMatched) { if (isMatched) {
matchtimes++; matchtimes++;
targetline = i; targetline = i;

View File

@ -1638,7 +1638,7 @@ static char *get_application_name(void)
securec_check_ss_c(rc, "\0", "\0"); securec_check_ss_c(rc, "\0", "\0");
if ((optlines = (char **)read_guc_file(conf_path)) != NULL) { if ((optlines = (char **)read_guc_file(conf_path)) != NULL) {
lines_index = find_guc_option(optlines, config_para_build, NULL, NULL, &optvalue_off, &optvalue_len); lines_index = find_guc_option(optlines, config_para_build, NULL, NULL, &optvalue_off, &optvalue_len, false);
if (lines_index != INVALID_LINES_IDX) { if (lines_index != INVALID_LINES_IDX) {
rc = strncpy_s(arg_str, NAMEDATALEN, optlines[lines_index] + optvalue_off, optvalue_len); rc = strncpy_s(arg_str, NAMEDATALEN, optlines[lines_index] + optvalue_off, optvalue_len);
securec_check_c(rc, "\0", "\0"); securec_check_c(rc, "\0", "\0");

View File

@ -390,8 +390,8 @@ extern char* xstrdup(const char* s);
extern char** read_guc_file(const char* path); extern char** read_guc_file(const char* path);
extern ErrCode write_guc_file(const char* path, char** lines); extern ErrCode write_guc_file(const char* path, char** lines);
extern int find_guc_option( extern int find_guc_option(char** optlines, const char* opt_name,
char** optlines, const char* opt_name, int* name_offset, int* name_len, int* value_offset, int* value_len); int* name_offset, int* name_len, int* value_offset, int* value_len, bool ignore_case);
extern void modify_guc_lines(char*** optlines, const char** opt_name, char** copy_from_line); extern void modify_guc_lines(char*** optlines, const char** opt_name, char** copy_from_line);
extern ErrCode copy_guc_lines(char** copy_to_line, char** optlines, const char** opt_name); extern ErrCode copy_guc_lines(char** copy_to_line, char** optlines, const char** opt_name);

View File

@ -17,14 +17,28 @@ show io_limits;
\c \c
DROP user alter_system_testuser; DROP user alter_system_testuser;
------------------------------------------------------
-- there is a black list of guc for sysadmin.
------------------------------------------------------
DROP ROLE IF EXISTS alter_system_testadmin;
CREATE USER alter_system_testadmin with sysadmin PASSWORD 'test@1233';
SET SESSION AUTHORIZATION alter_system_testadmin PASSWORD 'test@1233';
show modify_initial_password;
show enable_copy_server_files;
ALTER SYSTEM SET modify_initial_password to on;
ALTER SYSTEM SET enable_copy_server_files to on;
show modify_initial_password;
show enable_copy_server_files;
\c
DROP user alter_system_testadmin;
------------------------------------------------------- -------------------------------------------------------
-- clear pg_query_audit for the last test -- make sure that audit is on.
------------------------------------------------------- -------------------------------------------------------
show audit_enabled; show audit_enabled;
show audit_set_parameter; show audit_set_parameter;
show audit_user_violation; show audit_user_violation;
SELECT pg_delete_audit('2000-01-01 ','9999-01-01');
-------------------------------------------------------- --------------------------------------------------------
-- for POSTMASTER GUC -- for POSTMASTER GUC
@ -45,10 +59,12 @@ SHOW log_destination;
ALTER SYSTEM SET log_destination to 'stderr,csvlog'; ALTER SYSTEM SET log_destination to 'stderr,csvlog';
SHOW autovacuum_mode; SHOW autovacuum_mode;
ALTER SYSTEM SET autovacuum_mode to 'analyze'; ALTER SYSTEM SET autovacuum_mode to 'analyze';
SHOW parctl_min_cost; SHOW io_control_unit;
ALTER SYSTEM SET parctl_min_cost TO 1000; ALTER SYSTEM SET io_control_unit TO 10000;
SHOW vacuum_defer_cleanup_age; SHOW vacuum_defer_cleanup_age;
ALTER SYSTEM SET vacuum_defer_cleanup_age TO 50000; ALTER SYSTEM SET vacuum_defer_cleanup_age TO 50000;
show enable_copy_server_files;
ALTER SYSTEM SET enable_copy_server_files to on;
select pg_sleep(2); -- wait to reload postgres.conf file select pg_sleep(2); -- wait to reload postgres.conf file
@ -62,10 +78,12 @@ SHOW log_destination;
ALTER SYSTEM SET log_destination to 'stderr'; ALTER SYSTEM SET log_destination to 'stderr';
SHOW autovacuum_mode; SHOW autovacuum_mode;
ALTER SYSTEM SET autovacuum_mode to mix; ALTER SYSTEM SET autovacuum_mode to mix;
SHOW parctl_min_cost; SHOW io_control_unit;
ALTER SYSTEM SET parctl_min_cost TO 100000; ALTER SYSTEM SET io_control_unit TO 6000;
SHOW vacuum_defer_cleanup_age; SHOW vacuum_defer_cleanup_age;
ALTER SYSTEM SET vacuum_defer_cleanup_age TO 0; ALTER SYSTEM SET vacuum_defer_cleanup_age TO 0;
show enable_copy_server_files;
ALTER SYSTEM SET enable_copy_server_files to off;
select pg_sleep(2); -- wait to reload postgres.conf file select pg_sleep(2); -- wait to reload postgres.conf file
@ -73,9 +91,8 @@ SHOW password_lock_time;
SHOW autovacuum; SHOW autovacuum;
SHOW log_destination; SHOW log_destination;
SHOW autovacuum_mode; SHOW autovacuum_mode;
SHOW parctl_min_cost; SHOW io_control_unit;
SHOW enable_copy_server_files;
-- some err case -- some err case
ALTER SYSTEM SET password_lock_time to true; ALTER SYSTEM SET password_lock_time to true;
@ -83,8 +100,8 @@ ALTER SYSTEM SET autovacuum to 'lalala';
ALTER SYSTEM SET log_destination to 'abcdefg'; ALTER SYSTEM SET log_destination to 'abcdefg';
ALTER SYSTEM SET autovacuum_mode to 123; ALTER SYSTEM SET autovacuum_mode to 123;
ALTER SYSTEM SET autovacuum_mode to lalala; ALTER SYSTEM SET autovacuum_mode to lalala;
ALTER SYSTEM SET parctl_min_cost TO -100; ALTER SYSTEM SET io_control_unit TO -100;
ALTER SYSTEM SET parctl_min_cost TO 1.1; ALTER SYSTEM SET io_control_unit TO 1.1;
ALTER SYSTEM SET vacuum_defer_cleanup_age TO 5.1; ALTER SYSTEM SET vacuum_defer_cleanup_age TO 5.1;
ALTER SYSTEM SET vacuum_defer_cleanup_age TO '8#@da%'; ALTER SYSTEM SET vacuum_defer_cleanup_age TO '8#@da%';
@ -94,7 +111,7 @@ SHOW password_lock_time;
SHOW autovacuum; SHOW autovacuum;
SHOW log_destination; SHOW log_destination;
SHOW autovacuum_mode; SHOW autovacuum_mode;
SHOW parctl_min_cost; SHOW io_control_unit;
------------------------------------------------------ ------------------------------------------------------
-- FOR BACKEND GUC -- FOR BACKEND GUC
@ -128,13 +145,39 @@ show autoanalyze;
----------------------------------------------------- -----------------------------------------------------
-- UNSUPPORT SET TO DEFAULT -- UNSUPPORT SET TO DEFAULT
-- NOTICE: we change io_control_unit here and not recover.
----------------------------------------------------- -----------------------------------------------------
SHOW parctl_min_cost; SHOW io_control_unit;
ALTER SYSTEM SET parctl_min_cost TO 1000; ALTER SYSTEM SET io_control_unit TO 10000;
ALTER SYSTEM SET parctl_min_cost TO default; ALTER SYSTEM SET io_control_unit TO default;
select pg_sleep(1); select pg_sleep(1);
SHOW parctl_min_cost; SHOW io_control_unit;
ALTER SYSTEM SET parctl_min_cost TO 100000;
------------------------------------------------------
-- exception in configure file
-- 1.duplicate parameter
-- 2.mixed case
------------------------------------------------------
\! echo "# io_control_Unit = 50000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! echo "io_control_uNit = 50000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! echo "io_control_unIt = 60000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! echo "# io_control_uniT = 80000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
ALTER SYSTEM SET "io_control_UNit" TO 90000;
\! grep "io_control_" @abs_srcdir@/tmp_check/datanode1/postgresql.conf
select pg_sleep(1);
SHOW io_control_unit;
-------------------------------------------------------
-- exception: configure file does not exist.
-- expect: read bak file.
-- NOTICE: we recover io_control_unit here.
-------------------------------------------------------
\! rm @abs_srcdir@/tmp_check/datanode1/postgresql.conf
ALTER SYSTEM SET "io_control_unIT" TO 6000;
select pg_sleep(1);
SHOW io_control_unit;
\! grep "io_control_" @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! grep "io_control_" @abs_srcdir@/tmp_check/datanode1/postgresql.conf.bak
------------------------------------------------------- -------------------------------------------------------
-- can not in a transaction -- can not in a transaction
@ -149,6 +192,5 @@ END;
------------------------------------------------------- -------------------------------------------------------
-- shoule be audited. -- shoule be audited.
------------------------------------------------------ -------------------------------------------------------
SELECT type,result,userid,database,client_conninfo,object_name,detail_info FROM pg_query_audit('2000-01-01 08:00:00','9999-01-01 08:00:00'); SELECT type,result,userid,database,client_conninfo,object_name,detail_info FROM pg_query_audit('2000-01-01 08:00:00','9999-01-01 08:00:00') where detail_info like 'ALTER SYSTEM SET %';

View File

@ -12,7 +12,7 @@ show use_workload_manager;
(1 row) (1 row)
ALTER SYSTEM SET use_workload_manager to off; ALTER SYSTEM SET use_workload_manager to off;
ERROR: must be superuser to execute ALTER SYSTEM SET command ERROR: Permission denied, must be sysadmin to execute ALTER SYSTEM SET command.
show io_limits; show io_limits;
io_limits io_limits
----------- -----------
@ -20,7 +20,7 @@ show io_limits;
(1 row) (1 row)
ALTER SYSTEM SET io_limits to 100; ALTER SYSTEM SET io_limits to 100;
ERROR: must be superuser to execute ALTER SYSTEM SET command ERROR: Permission denied, must be sysadmin to execute ALTER SYSTEM SET command.
select pg_sleep(1); -- wait to reload postgres.conf file select pg_sleep(1); -- wait to reload postgres.conf file
pg_sleep pg_sleep
---------- ----------
@ -41,8 +41,45 @@ show io_limits;
\c \c
DROP user alter_system_testuser; DROP user alter_system_testuser;
------------------------------------------------------
-- there is a black list of guc for sysadmin.
------------------------------------------------------
DROP ROLE IF EXISTS alter_system_testadmin;
NOTICE: role "alter_system_testadmin" does not exist, skipping
CREATE USER alter_system_testadmin with sysadmin PASSWORD 'test@1233';
SET SESSION AUTHORIZATION alter_system_testadmin PASSWORD 'test@1233';
show modify_initial_password;
modify_initial_password
-------------------------
off
(1 row)
show enable_copy_server_files;
enable_copy_server_files
--------------------------
off
(1 row)
ALTER SYSTEM SET modify_initial_password to on;
ERROR: GUC:modify_initial_password could only be set by initial user.
ALTER SYSTEM SET enable_copy_server_files to on;
ERROR: GUC:enable_copy_server_files could only be set by initial user.
show modify_initial_password;
modify_initial_password
-------------------------
off
(1 row)
show enable_copy_server_files;
enable_copy_server_files
--------------------------
off
(1 row)
\c
DROP user alter_system_testadmin;
------------------------------------------------------- -------------------------------------------------------
-- clear pg_query_audit for the last test -- make sure that audit is on.
------------------------------------------------------- -------------------------------------------------------
show audit_enabled; show audit_enabled;
audit_enabled audit_enabled
@ -62,12 +99,6 @@ show audit_user_violation;
1 1
(1 row) (1 row)
SELECT pg_delete_audit('2000-01-01 ','9999-01-01');
pg_delete_audit
-----------------
(1 row)
-------------------------------------------------------- --------------------------------------------------------
-- for POSTMASTER GUC -- for POSTMASTER GUC
-------------------------------------------------------- --------------------------------------------------------
@ -113,13 +144,13 @@ SHOW autovacuum_mode;
(1 row) (1 row)
ALTER SYSTEM SET autovacuum_mode to 'analyze'; ALTER SYSTEM SET autovacuum_mode to 'analyze';
SHOW parctl_min_cost; SHOW io_control_unit;
parctl_min_cost io_control_unit
----------------- -----------------
100000 6000
(1 row) (1 row)
ALTER SYSTEM SET parctl_min_cost TO 1000; ALTER SYSTEM SET io_control_unit TO 10000;
SHOW vacuum_defer_cleanup_age; SHOW vacuum_defer_cleanup_age;
vacuum_defer_cleanup_age vacuum_defer_cleanup_age
-------------------------- --------------------------
@ -127,6 +158,13 @@ SHOW vacuum_defer_cleanup_age;
(1 row) (1 row)
ALTER SYSTEM SET vacuum_defer_cleanup_age TO 50000; ALTER SYSTEM SET vacuum_defer_cleanup_age TO 50000;
show enable_copy_server_files;
enable_copy_server_files
--------------------------
off
(1 row)
ALTER SYSTEM SET enable_copy_server_files to on;
select pg_sleep(2); -- wait to reload postgres.conf file select pg_sleep(2); -- wait to reload postgres.conf file
pg_sleep pg_sleep
---------- ----------
@ -162,13 +200,13 @@ SHOW autovacuum_mode;
(1 row) (1 row)
ALTER SYSTEM SET autovacuum_mode to mix; ALTER SYSTEM SET autovacuum_mode to mix;
SHOW parctl_min_cost; SHOW io_control_unit;
parctl_min_cost io_control_unit
----------------- -----------------
1000 10000
(1 row) (1 row)
ALTER SYSTEM SET parctl_min_cost TO 100000; ALTER SYSTEM SET io_control_unit TO 6000;
SHOW vacuum_defer_cleanup_age; SHOW vacuum_defer_cleanup_age;
vacuum_defer_cleanup_age vacuum_defer_cleanup_age
-------------------------- --------------------------
@ -176,6 +214,13 @@ SHOW vacuum_defer_cleanup_age;
(1 row) (1 row)
ALTER SYSTEM SET vacuum_defer_cleanup_age TO 0; ALTER SYSTEM SET vacuum_defer_cleanup_age TO 0;
show enable_copy_server_files;
enable_copy_server_files
--------------------------
on
(1 row)
ALTER SYSTEM SET enable_copy_server_files to off;
select pg_sleep(2); -- wait to reload postgres.conf file select pg_sleep(2); -- wait to reload postgres.conf file
pg_sleep pg_sleep
---------- ----------
@ -206,10 +251,16 @@ SHOW autovacuum_mode;
mix mix
(1 row) (1 row)
SHOW parctl_min_cost; SHOW io_control_unit;
parctl_min_cost io_control_unit
----------------- -----------------
100000 6000
(1 row)
SHOW enable_copy_server_files;
enable_copy_server_files
--------------------------
off
(1 row) (1 row)
-- some err case -- some err case
@ -226,10 +277,10 @@ HINT: Available values: analyze, vacuum, mix, none.
ALTER SYSTEM SET autovacuum_mode to lalala; ALTER SYSTEM SET autovacuum_mode to lalala;
ERROR: invalid value for parameter "autovacuum_mode": "lalala" ERROR: invalid value for parameter "autovacuum_mode": "lalala"
HINT: Available values: analyze, vacuum, mix, none. HINT: Available values: analyze, vacuum, mix, none.
ALTER SYSTEM SET parctl_min_cost TO -100; ALTER SYSTEM SET io_control_unit TO -100;
ERROR: -100 is outside the valid range for parameter "parctl_min_cost" (-1 .. 2147483647) ERROR: -100 is outside the valid range for parameter "io_control_unit" (1000 .. 1000000)
ALTER SYSTEM SET parctl_min_cost TO 1.1; ALTER SYSTEM SET io_control_unit TO 1.1;
ERROR: invalid value for parameter "parctl_min_cost": "1.1" ERROR: invalid value for parameter "io_control_unit": "1.1"
ALTER SYSTEM SET vacuum_defer_cleanup_age TO 5.1; ALTER SYSTEM SET vacuum_defer_cleanup_age TO 5.1;
ERROR: parameter "vacuum_defer_cleanup_age" requires a numeric value ERROR: parameter "vacuum_defer_cleanup_age" requires a numeric value
ALTER SYSTEM SET vacuum_defer_cleanup_age TO '8#@da%'; ALTER SYSTEM SET vacuum_defer_cleanup_age TO '8#@da%';
@ -264,10 +315,10 @@ SHOW autovacuum_mode;
mix mix
(1 row) (1 row)
SHOW parctl_min_cost; SHOW io_control_unit;
parctl_min_cost io_control_unit
----------------- -----------------
100000 6000
(1 row) (1 row)
------------------------------------------------------ ------------------------------------------------------
@ -355,15 +406,16 @@ show autoanalyze;
----------------------------------------------------- -----------------------------------------------------
-- UNSUPPORT SET TO DEFAULT -- UNSUPPORT SET TO DEFAULT
-- NOTICE: we change io_control_unit here and not recover.
----------------------------------------------------- -----------------------------------------------------
SHOW parctl_min_cost; SHOW io_control_unit;
parctl_min_cost io_control_unit
----------------- -----------------
100000 6000
(1 row) (1 row)
ALTER SYSTEM SET parctl_min_cost TO 1000; ALTER SYSTEM SET io_control_unit TO 10000;
ALTER SYSTEM SET parctl_min_cost TO default; ALTER SYSTEM SET io_control_unit TO default;
ERROR: ALTER SYSTEM SET does not support 'set to default'. ERROR: ALTER SYSTEM SET does not support 'set to default'.
select pg_sleep(1); select pg_sleep(1);
pg_sleep pg_sleep
@ -371,13 +423,73 @@ select pg_sleep(1);
(1 row) (1 row)
SHOW parctl_min_cost; SHOW io_control_unit;
parctl_min_cost io_control_unit
----------------- -----------------
1000 10000
(1 row) (1 row)
ALTER SYSTEM SET parctl_min_cost TO 100000; ------------------------------------------------------
-- exception in configure file
-- 1.duplicate parameter
-- 2.mixed case
------------------------------------------------------
\! echo "# io_control_Unit = 50000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! echo "io_control_uNit = 50000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! echo "io_control_unIt = 60000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
\! echo "# io_control_uniT = 80000" >> @abs_srcdir@/tmp_check/datanode1/postgresql.conf
ALTER SYSTEM SET "io_control_UNit" TO 90000;
NOTICE: There are 3 "io_control_UNit" not commented in "postgresql.conf", and only the last one in 916th line will be set and used.
\! grep "io_control_" @abs_srcdir@/tmp_check/datanode1/postgresql.conf
io_control_unit = 10000
# io_control_Unit = 50000
io_control_uNit = 50000
io_control_UNit = 90000
# io_control_uniT = 80000
select pg_sleep(1);
pg_sleep
----------
(1 row)
SHOW io_control_unit;
io_control_unit
-----------------
90000
(1 row)
-------------------------------------------------------
-- exception: configure file does not exist.
-- expect: read bak file.
-- NOTICE: we recover io_control_unit here.
-------------------------------------------------------
\! rm @abs_srcdir@/tmp_check/datanode1/postgresql.conf
ALTER SYSTEM SET "io_control_unIT" TO 6000;
NOTICE: There are 3 "io_control_unIT" not commented in "postgresql.conf", and only the last one in 916th line will be set and used.
select pg_sleep(1);
pg_sleep
----------
(1 row)
SHOW io_control_unit;
io_control_unit
-----------------
6000
(1 row)
\! grep "io_control_" @abs_srcdir@/tmp_check/datanode1/postgresql.conf
io_control_unit = 10000
# io_control_Unit = 50000
io_control_uNit = 50000
io_control_unIT = 6000
# io_control_uniT = 80000
\! grep "io_control_" @abs_srcdir@/tmp_check/datanode1/postgresql.conf.bak
io_control_unit = 10000
# io_control_Unit = 50000
io_control_uNit = 50000
io_control_unIT = 6000
# io_control_uniT = 80000
------------------------------------------------------- -------------------------------------------------------
-- can not in a transaction -- can not in a transaction
------------------------------------------------------- -------------------------------------------------------
@ -391,36 +503,38 @@ SHOW autovacuum;
ALTER SYSTEM SET autovacuum to off; ALTER SYSTEM SET autovacuum to off;
ERROR: ALTER SYSTEM SET cannot run inside a transaction block ERROR: ALTER SYSTEM SET cannot run inside a transaction block
SHOW autovacuum; SHOW autovacuum;
--?ERROR: current transaction is aborted, commands ignored until end of transaction block.* ERROR: current transaction is aborted, commands ignored until end of transaction block, firstChar[Q]
ALTER SYSTEM SET autovacuum to on; ALTER SYSTEM SET autovacuum to on;
--?ERROR: current transaction is aborted, commands ignored until end of transaction block.* ERROR: current transaction is aborted, commands ignored until end of transaction block, firstChar[Q]
SHOW autovacuum; SHOW autovacuum;
--?ERROR: current transaction is aborted, commands ignored until end of transaction block.* ERROR: current transaction is aborted, commands ignored until end of transaction block, firstChar[Q]
END; END;
------------------------------------------------------- -------------------------------------------------------
-- shoule be audited. -- shoule be audited.
------------------------------------------------------ -------------------------------------------------------
SELECT type,result,userid,database,client_conninfo,object_name,detail_info FROM pg_query_audit('2000-01-01 08:00:00','9999-01-01 08:00:00'); SELECT type,result,userid,database,client_conninfo,object_name,detail_info FROM pg_query_audit('2000-01-01 08:00:00','9999-01-01 08:00:00') where detail_info like 'ALTER SYSTEM SET %';
type | result | userid | database | client_conninfo | object_name | detail_info type | result | userid | database | client_conninfo | object_name | detail_info
----------------+--------+--------+------------+-----------------+--------------------------+------------------------------------------------------ ---------------+--------+--------+------------+-----------------+--------------------------+------------------------------------------------------
internal_event | ok | 10 | regression | gsql@[local] | null | SELECT pg_delete_audit('2000-01-01 ','9999-01-01');
set_parameter | ok | 10 | regression | gsql@[local] | enable_thread_pool | ALTER SYSTEM SET enable_thread_pool to off; set_parameter | ok | 10 | regression | gsql@[local] | enable_thread_pool | ALTER SYSTEM SET enable_thread_pool to off;
set_parameter | ok | 10 | regression | gsql@[local] | enable_thread_pool | ALTER SYSTEM SET enable_thread_pool to on; set_parameter | ok | 10 | regression | gsql@[local] | enable_thread_pool | ALTER SYSTEM SET enable_thread_pool to on;
set_parameter | ok | 10 | regression | gsql@[local] | password_lock_time | ALTER SYSTEM SET password_lock_time to 1.1; set_parameter | ok | 10 | regression | gsql@[local] | password_lock_time | ALTER SYSTEM SET password_lock_time to 1.1;
set_parameter | ok | 10 | regression | gsql@[local] | autovacuum | ALTER SYSTEM SET autovacuum to off; set_parameter | ok | 10 | regression | gsql@[local] | autovacuum | ALTER SYSTEM SET autovacuum to off;
set_parameter | ok | 10 | regression | gsql@[local] | log_destination | ALTER SYSTEM SET log_destination to 'stderr,csvlog'; set_parameter | ok | 10 | regression | gsql@[local] | log_destination | ALTER SYSTEM SET log_destination to 'stderr,csvlog';
set_parameter | ok | 10 | regression | gsql@[local] | autovacuum_mode | ALTER SYSTEM SET autovacuum_mode to 'analyze'; set_parameter | ok | 10 | regression | gsql@[local] | autovacuum_mode | ALTER SYSTEM SET autovacuum_mode to 'analyze';
set_parameter | ok | 10 | regression | gsql@[local] | parctl_min_cost | ALTER SYSTEM SET parctl_min_cost TO 1000; set_parameter | ok | 10 | regression | gsql@[local] | io_control_unit | ALTER SYSTEM SET io_control_unit TO 10000;
set_parameter | ok | 10 | regression | gsql@[local] | vacuum_defer_cleanup_age | ALTER SYSTEM SET vacuum_defer_cleanup_age TO 50000; set_parameter | ok | 10 | regression | gsql@[local] | vacuum_defer_cleanup_age | ALTER SYSTEM SET vacuum_defer_cleanup_age TO 50000;
set_parameter | ok | 10 | regression | gsql@[local] | enable_copy_server_files | ALTER SYSTEM SET enable_copy_server_files to on;
set_parameter | ok | 10 | regression | gsql@[local] | password_lock_time | ALTER SYSTEM SET password_lock_time to 1; set_parameter | ok | 10 | regression | gsql@[local] | password_lock_time | ALTER SYSTEM SET password_lock_time to 1;
set_parameter | ok | 10 | regression | gsql@[local] | autovacuum | ALTER SYSTEM SET autovacuum to on; set_parameter | ok | 10 | regression | gsql@[local] | autovacuum | ALTER SYSTEM SET autovacuum to on;
set_parameter | ok | 10 | regression | gsql@[local] | log_destination | ALTER SYSTEM SET log_destination to 'stderr'; set_parameter | ok | 10 | regression | gsql@[local] | log_destination | ALTER SYSTEM SET log_destination to 'stderr';
set_parameter | ok | 10 | regression | gsql@[local] | autovacuum_mode | ALTER SYSTEM SET autovacuum_mode to mix; set_parameter | ok | 10 | regression | gsql@[local] | autovacuum_mode | ALTER SYSTEM SET autovacuum_mode to mix;
set_parameter | ok | 10 | regression | gsql@[local] | parctl_min_cost | ALTER SYSTEM SET parctl_min_cost TO 100000; set_parameter | ok | 10 | regression | gsql@[local] | io_control_unit | ALTER SYSTEM SET io_control_unit TO 6000;
set_parameter | ok | 10 | regression | gsql@[local] | vacuum_defer_cleanup_age | ALTER SYSTEM SET vacuum_defer_cleanup_age TO 0; set_parameter | ok | 10 | regression | gsql@[local] | vacuum_defer_cleanup_age | ALTER SYSTEM SET vacuum_defer_cleanup_age TO 0;
set_parameter | ok | 10 | regression | gsql@[local] | enable_copy_server_files | ALTER SYSTEM SET enable_copy_server_files to off;
set_parameter | ok | 10 | regression | gsql@[local] | ignore_system_indexes | ALTER SYSTEM SET ignore_system_indexes TO on; set_parameter | ok | 10 | regression | gsql@[local] | ignore_system_indexes | ALTER SYSTEM SET ignore_system_indexes TO on;
set_parameter | ok | 10 | regression | gsql@[local] | ignore_system_indexes | ALTER SYSTEM SET ignore_system_indexes TO off; set_parameter | ok | 10 | regression | gsql@[local] | ignore_system_indexes | ALTER SYSTEM SET ignore_system_indexes TO off;
set_parameter | ok | 10 | regression | gsql@[local] | parctl_min_cost | ALTER SYSTEM SET parctl_min_cost TO 1000; set_parameter | ok | 10 | regression | gsql@[local] | io_control_unit | ALTER SYSTEM SET io_control_unit TO 10000;
set_parameter | ok | 10 | regression | gsql@[local] | parctl_min_cost | ALTER SYSTEM SET parctl_min_cost TO 100000; set_parameter | ok | 10 | regression | gsql@[local] | io_control_UNit | ALTER SYSTEM SET "io_control_UNit" TO 90000;
(19 rows) set_parameter | ok | 10 | regression | gsql@[local] | io_control_unIT | ALTER SYSTEM SET "io_control_unIT" TO 6000;
(21 rows)

View File

@ -278,7 +278,7 @@ test: create_view1 create_view2 create_view3 create_view4 create_view5
#test: select #test: select
#test: misc #test: misc
#test: stats #test: stats
#test: alter_system_set test: alter_system_set
#dispatch from 13 #dispatch from 13
test: function test: function