blob: 2f052fdad1a7588eec040a77893fecb0a9361ea7 [file] [log] [blame]
-- Vacuum every day at 10:00am (GMT)
create task vacuum_db SCHEDULE '0 10 * * *' AS 'vacuum';
-- Stop scheduling a task
drop task vacuum_db;
-- Invalid input: missing parts
create task missing_parts schedule '* * * *' as 'select 1';
ERROR: invalid schedule: * * * *
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
-- Invalid input: trailing characters
create task trail_char schedule '5 secondc' as 'select 1';
ERROR: invalid schedule: 5 secondc
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
create task trail_char schedule '50 seconds c' as 'select 1';
ERROR: invalid schedule: 50 seconds c
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
-- Invalid input: seconds out of range
create task invalid_seconds schedule '-1 seconds' as 'select 1';
ERROR: invalid schedule: -1 seconds
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
create task invalid_seconds schedule '0 seconds' as 'select 1';
ERROR: invalid schedule: 0 seconds
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
create task invalid_seconds schedule '60 seconds' as 'select 1';
ERROR: invalid schedule: 60 seconds
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
create task invalid_seconds schedule '1000000000000 seconds' as 'select 1';
ERROR: invalid schedule: 1000000000000 seconds
HINT: Use cron format (e.g. 5 4 * * *), or interval format '[1-59] seconds'
-- Vacuum every day at 10:00am (GMT)
create task vacuum_db SCHEDULE '0 10 * * *' AS 'vacuum';
select schedule, command, active, jobname from pg_task order by jobid;
schedule | command | active | jobname
------------+---------+--------+-----------
0 10 * * * | vacuum | t | vacuum_db
(1 row)
-- Make that 11:00am (GMT)
alter task vacuum_db schedule '0 11 * * *';
select schedule, command, active, jobname from pg_task order by jobid;
schedule | command | active | jobname
------------+---------+--------+-----------
0 11 * * * | vacuum | t | vacuum_db
(1 row)
-- Make that VACUUM FULL
alter task vacuum_db as 'vacuum full';
select schedule, command, active, jobname from pg_task order by jobid;
schedule | command | active | jobname
------------+-------------+--------+-----------
0 11 * * * | vacuum full | t | vacuum_db
(1 row)
-- Update to a non existing database
alter task vacuum_db database hopedoesnotexist;
ERROR: database "hopedoesnotexist" does not exist
-- Create a database that does not allow connection
create database task_dbno;
revoke CONNECT on DATABASE task_dbno from PUBLIC;
-- create a test user
create user task_cron with password 'pwd';
NOTICE: resource queue required -- using default resource queue "pg_default"
-- Create a task for another user
create task another_user_task schedule '* 10 * * *' database task_dbno user task_cron as 'vacuum';
ERROR: User task_cron does not have CONNECT privilege on task_dbno
-- Schedule a task for this user on the database that does not accept connections
alter task vacuum_db database task_dbno user task_cron;
ERROR: User task_cron does not have CONNECT privilege on task_dbno
-- Schedule a task that user doest not exist
alter task vacuum_db user hopedoesnotexist;
ERROR: role "hopedoesnotexist" does not exist
-- valid interval tasks
create task valid_task_1 schedule '1 second' as 'select 1';
create task valid_task_2 schedule ' 30 sEcOnDs ' as 'select 1';
create task valid_task_3 schedule '59 seconds' as 'select 1';
create task valid_task_4 schedule '17 seconds ' as 'select 1';
-- task in function
DO $$
BEGIN
create task fn_task schedule '5 * * * * ' as 'select 1';
END $$;
select jobname from pg_task where jobname = 'fn_task';
jobname
---------
fn_task
(1 row)
DO $$
BEGIN
alter task fn_task schedule '6 * * * *';
END $$;
select schedule from pg_task where jobname = 'fn_task';
schedule
-----------
6 * * * *
(1 row)
DO $$
DECLARE
jn text;
BEGIN
SELECT jobname from pg_task where jobname = 'fn_task' into jn;
EXECUTE FORMAT('DROP TASK %I', jn);
END $$;
select jobname from pg_task where jobname = 'fn_task';
jobname
---------
(0 rows)
-- clean up
drop database task_dbno;
drop user task_cron;
drop task vacuum_db;
drop task valid_task_1;
drop task valid_task_2;
drop task valid_task_3;
drop task valid_task_4;