blob: 2cc316c40fd9eccb675a544e4a3ba2cce3e7bd0f [file] [log] [blame]
-- By design, every boolean query (which doesn't error out) in this test must return true.
-- For reference, 2011-08-30 was a Tuesday!
--
CREATE FUNCTION check_auth_time_constraints(cstring, timestamptz)
RETURNS bool
AS '@abs_builddir@/regress@DLSUFFIX@'
LANGUAGE C IMMUTABLE STRICT NO SQL;
--
-- invalid timestamp should error out
--
SELECT check_auth_time_constraints('abc', '5');
--
-- basic day level constraints
--
CREATE ROLE abc DENY DAY 2;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-31 00:00:00');
DROP ROLE abc;
--
-- basic time level constraints
--
CREATE ROLE abc WITH LOGIN DENY DAY 'Saturday';
DROP ROLE abc;
CREATE ROLE abc DENY DAY 2 TIME '13:15:34';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 13:15:33');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 13:15:34');
SELECT check_auth_time_constraints('abc', '2011-08-30 13:15:35');
DROP ROLE abc;
--
-- some similar CREATE ROLE coverage
--
CREATE ROLE abc DENY BETWEEN DAY 2 AND DAY 3;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-09-01 00:00:00');
DROP ROLE abc;
CREATE ROLE abc DENY BETWEEN DAY 2 TIME '05:30:30' AND DAY 3;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 05:30:29');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 05:30:30');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-09-01 00:00:00');
DROP ROLE abc;
CREATE ROLE abc DENY BETWEEN DAY 2 AND DAY 3 TIME '11:34:53';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 11:34:53');
SELECT check_auth_time_constraints('abc', '2011-08-31 11:34:54');
DROP ROLE abc;
CREATE ROLE abc DENY BETWEEN DAY 2 TIME '15:24:20' AND DAY 3 TIME '11:34:53';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 15:24:19');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 15:24:20');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 11:34:53');
SELECT check_auth_time_constraints('abc', '2011-08-31 11:34:54');
DROP ROLE abc;
--
-- ALTER ROLE grammar coverage (some repetition here)
--
CREATE ROLE abc;
ALTER ROLE abc DENY DAY 2;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-31 00:00:00');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY DAY 2 TIME '13:15:34';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 13:15:33');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 13:15:34');
SELECT check_auth_time_constraints('abc', '2011-08-30 13:15:35');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY BETWEEN DAY 2 AND DAY 3;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-09-01 00:00:00');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY BETWEEN DAY 2 TIME '05:30:30' AND DAY 3;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 05:30:29');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 05:30:30');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-09-01 00:00:00');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY BETWEEN DAY 2 AND DAY 3 TIME '11:34:53';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 11:34:53');
SELECT check_auth_time_constraints('abc', '2011-08-31 11:34:54');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY BETWEEN DAY 2 TIME '15:24:20' AND DAY 3 TIME '11:34:53';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 15:24:19');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 15:24:20');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 11:34:53');
SELECT check_auth_time_constraints('abc', '2011-08-31 11:34:54');
DROP ROLE abc;
--
-- very minimal coverage of CREATE USER and ALTER USER
--
CREATE USER abc DENY DAY 2;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
select NOT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
ALTER USER abc DENY DAY 3 TIME '12:00:00';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
select NOT check_auth_time_constraints('abc', '2011-08-31 12:00:00');
ALTER USER abc DROP DENY FOR DAY 2 TIME '12:00:00';
DROP USER abc;
--
-- CREATE ROLE w/ multiple deny specifications
--
CREATE ROLE abc DENY DAY 0 DENY DAY 2 DENY BETWEEN DAY 4 AND DAY 5 TIME '13:00:00';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-27 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-28 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-28 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-29 00:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-31 00:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-31 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-09-01 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-09-02 13:00:00');
SELECT check_auth_time_constraints('abc', '2011-09-02 13:00:01');
DROP ROLE abc;
--
-- ALTER ROLE w/ multiple deny specifications
--
CREATE ROLE abc;
ALTER ROLE abc DENY DAY 0 DENY DAY 2 DENY BETWEEN DAY 4 AND DAY 5 TIME '13:00:00';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-27 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-28 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-28 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-29 00:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-29 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-31 00:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-31 23:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-09-01 00:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-09-02 13:00:00');
SELECT check_auth_time_constraints('abc', '2011-09-02 13:00:01');
DROP ROLE abc;
--
-- ALTER ROLE DROP
-- This syntax drops any rule that *overlaps* with the specified point/interval.
--
CREATE ROLE abc DENY DAY 2;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
ALTER ROLE abc DROP DENY FOR DAY 2 TIME '13:00';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY BETWEEN DAY 2 TIME '01:00' AND DAY 2 TIME '02:00';
ALTER ROLE abc DENY BETWEEN DAY 2 TIME '23:00' AND DAY 3 TIME '03:00';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 01:30:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 01:00:00');
ALTER ROLE abc DROP DENY FOR DAY 2;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 01:30:00');
SELECT check_auth_time_constraints('abc', '2011-08-31 01:00:00');
DROP ROLE abc;
CREATE ROLE abc;
ALTER ROLE abc DENY DAY 0 DENY DAY 1;
ALTER ROLE abc DROP DENY FOR DAY 2;
DROP ROLE abc;
--
-- ALTER ROLE w/ multiple deny and drop specifications
-- This should error out, as the expected behavior isn't quite intuitive.
--
CREATE ROLE abc;
ALTER ROLE abc DENY DAY 0 DENY DAY 1 DENY DAY 2 DROP DENY FOR DAY 1;
DROP ROLE abc;
--
-- DROP ROLE must release associated auth. constraints
--
CREATE ROLE abc DENY DAY 0 DENY DAY 1 DENY DAY 3 TIME '3:00 PM';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
DROP ROLE abc;
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
--
-- Wrap-around intervals
--
CREATE ROLE abc DENY BETWEEN DAY 6 TIME '12:00:00' AND DAY 0;
CREATE ROLE abc;
ALTER ROLE abc DENY BETWEEN DAY 5 AND DAY 1;
DROP ROLE abc;
--
-- English days of week
--
CREATE ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '12:00:00' AND DAY 2 TIME '1:00 PM';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 11:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 13:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-30 13:00:01');
DROP ROLE abc;
--
-- English days of week (negative)
--
CREATE ROLE abc DENY DAY 'Monkey' TIME '12:00:00';
CREATE ROLE abc WITH LOGIN DENY BETWEEN DAY 'Monday' TIME '00:00' AND DAY 'Monday' TIME '25:00';
CREATE ROLE abc WITH LOGIN DENY BETWEEN DAY 'Monday' TIME '01:65 AM' AND DAY 'Monday' TIME '12:00 PM';
CREATE ROLE abc WITH LOGIN DENY BETWEEN DAY 'Monday' TIME '-01:00' AND DAY 'Monday' TIME '06:00 PM';
CREATE ROLE abc DENY BETWEEN DAY 'Monday' TIME '00:00' AND DAY 'Monday' TIME '25:00';
--
-- What is '24:00:00'? Apparently, '2011-08-30 24:00:00' == '2011-08-31 00:00:00'.
-- But interpreted as a sole time value, '24:00:00' != '00:00:00' and
-- '24:00:00' > '23:59:59'. So, the following three queries should evaluate to true.
-- In other words, there is no way for the current time to ever be '24:00:00'.
--
CREATE ROLE abc DENY DAY 2 TIME '24:00:00';
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 23:59:59');
SELECT check_auth_time_constraints('abc', '2011-08-30 24:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-31 00:00:00');
DROP ROLE abc;
--
-- Inheritance of time constraints (negative)
--
CREATE ROLE abc DENY BETWEEN DAY 0 AND DAY 6;
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 12:00:00');
CREATE ROLE foo IN ROLE abc;
SELECT check_auth_time_constraints('foo', '2011-08-31 12:00:00');
DROP ROLE foo;
DROP ROLE abc;
--
-- Exercise catalog DML and pg_auth_time_constraint trigger
--
SET allow_system_table_mods=true;
CREATE ROLE abc;
insert into pg_auth_time_constraint (select oid, 2, '12:00:00', 3, '12:00:00' from pg_authid where rolname = 'abc');
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 11:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 12:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 12:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-31 12:00:01');
update pg_auth_time_constraint set start_time = '11:00:00', end_time = '13:00:00' where authid = (select oid from pg_authid where rolname = 'abc');
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-30 10:59:59');
SELECT NOT check_auth_time_constraints('abc', '2011-08-30 11:00:00');
SELECT NOT check_auth_time_constraints('abc', '2011-08-31 13:00:00');
SELECT check_auth_time_constraints('abc', '2011-08-31 13:00:01');
delete from pg_auth_time_constraint where authid = (select oid from pg_authid where rolname = 'abc');
select c.start_day, c.start_time, c.end_day, c.end_time from pg_authid a, pg_auth_time_constraint c where c.authid = a.oid and a.rolname = 'abc';
SELECT check_auth_time_constraints('abc', '2011-08-31 00:00:00');
DROP ROLE abc;
RESET allow_system_table_mods;
--
-- Superuser testing across CREATE ROLE, ALTER ROLE, and trigger
--
create role abc with login nosuperuser nocreaterole;
drop role abc;
create role abc superuser deny day 1;
create role abc superuser;
alter role abc deny day 1;
drop role abc;
create role abc;
alter role abc superuser deny day 1;
drop role abc;
create role abc deny day 1;
alter role abc superuser;
SELECT check_auth_time_constraints('abc', '2011-08-29 12:00:00');
drop role abc;
create role abc superuser;
SET allow_system_table_mods=true;
insert into pg_auth_time_constraint (select oid, 1, '00:00:00', 1, '24:00:00' from pg_authid where rolname = 'abc');
SELECT check_auth_time_constraints('abc', '2011-08-29 12:00:00');
DROP ROLE abc;
RESET allow_system_table_mods;
--
-- More DENY tests.
--
CREATE ROLE abc WITH LOGIN DENY BETWEEN DAY 'Monday' TIME '01:00:00' AND DAY 'Monday' TIME '01:30:00';;
SELECT r.rolname, d.start_day, d.start_time, d.end_day, d.end_time
FROM pg_auth_time_constraint d join pg_roles r ON (d.authid = r.oid)
WHERE r.rolname = 'abc'
ORDER BY r.rolname, d.start_day, d.start_time, d.end_day, d.end_time;
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '01:00:00' AND DAY 'Monday' TIME '01:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '02:00:00' AND DAY 'Monday' TIME '02:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '03:00:00' AND DAY 'Monday' TIME '03:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '04:00:00' AND DAY 'Monday' TIME '04:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '05:00:00' AND DAY 'Monday' TIME '05:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '06:00:00' AND DAY 'Monday' TIME '06:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '07:00:00' AND DAY 'Monday' TIME '07:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '08:00:00' AND DAY 'Monday' TIME '08:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '09:00:00' AND DAY 'Monday' TIME '09:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '10:00:00' AND DAY 'Monday' TIME '10:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '11:00:00' AND DAY 'Monday' TIME '11:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '12:00:00' AND DAY 'Monday' TIME '12:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '13:00:00' AND DAY 'Monday' TIME '13:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '14:00:00' AND DAY 'Monday' TIME '14:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '15:00:00' AND DAY 'Monday' TIME '15:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '16:00:00' AND DAY 'Monday' TIME '16:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '17:00:00' AND DAY 'Monday' TIME '17:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '18:00:00' AND DAY 'Monday' TIME '18:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '19:00:00' AND DAY 'Monday' TIME '19:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Monday' TIME '20:00:00' AND DAY 'Monday' TIME '20:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '01:00:00' AND DAY 'Tuesday' TIME '01:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '02:00:00' AND DAY 'Tuesday' TIME '02:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '03:00:00' AND DAY 'Tuesday' TIME '03:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '04:00:00' AND DAY 'Tuesday' TIME '04:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '05:00:00' AND DAY 'Tuesday' TIME '05:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '06:00:00' AND DAY 'Tuesday' TIME '06:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '07:00:00' AND DAY 'Tuesday' TIME '07:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '08:00:00' AND DAY 'Tuesday' TIME '08:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '09:00:00' AND DAY 'Tuesday' TIME '09:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '10:00:00' AND DAY 'Tuesday' TIME '10:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '11:00:00' AND DAY 'Tuesday' TIME '11:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '12:00:00' AND DAY 'Tuesday' TIME '12:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '13:00:00' AND DAY 'Tuesday' TIME '13:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '14:00:00' AND DAY 'Tuesday' TIME '14:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '15:00:00' AND DAY 'Tuesday' TIME '15:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '16:00:00' AND DAY 'Tuesday' TIME '16:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '17:00:00' AND DAY 'Tuesday' TIME '17:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '18:00:00' AND DAY 'Tuesday' TIME '18:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '19:00:00' AND DAY 'Tuesday' TIME '19:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Tuesday' TIME '20:00:00' AND DAY 'Tuesday' TIME '20:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '01:00:00' AND DAY 'Wednesday' TIME '01:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '02:00:00' AND DAY 'Wednesday' TIME '02:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '03:00:00' AND DAY 'Wednesday' TIME '03:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '04:00:00' AND DAY 'Wednesday' TIME '04:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '05:00:00' AND DAY 'Wednesday' TIME '05:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '06:00:00' AND DAY 'Wednesday' TIME '06:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '07:00:00' AND DAY 'Wednesday' TIME '07:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '08:00:00' AND DAY 'Wednesday' TIME '08:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '09:00:00' AND DAY 'Wednesday' TIME '09:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '10:00:00' AND DAY 'Wednesday' TIME '10:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '11:00:00' AND DAY 'Wednesday' TIME '11:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '12:00:00' AND DAY 'Wednesday' TIME '12:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '13:00:00' AND DAY 'Wednesday' TIME '13:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '14:00:00' AND DAY 'Wednesday' TIME '14:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '15:00:00' AND DAY 'Wednesday' TIME '15:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '16:00:00' AND DAY 'Wednesday' TIME '16:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '17:00:00' AND DAY 'Wednesday' TIME '17:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '18:00:00' AND DAY 'Wednesday' TIME '18:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '19:00:00' AND DAY 'Wednesday' TIME '19:30:00';
ALTER ROLE abc DENY BETWEEN DAY 'Wednesday' TIME '20:00:00' AND DAY 'Wednesday' TIME '20:30:00';
SELECT r.rolname, d.start_day, d.start_time, d.end_day, d.end_time
FROM pg_auth_time_constraint d join pg_roles r ON (d.authid = r.oid)
WHERE r.rolname = 'abc'
ORDER BY r.rolname, d.start_day, d.start_time, d.end_day, d.end_time;
ALTER ROLE abc DROP DENY FOR DAY 'Tuesday' TIME '01:30:00';
SELECT r.rolname, d.start_day, d.start_time, d.end_day, d.end_time
FROM pg_auth_time_constraint d join pg_roles r ON (d.authid = r.oid)
WHERE r.rolname = 'abc'
ORDER BY r.rolname, d.start_day, d.start_time, d.end_day, d.end_time;
ALTER ROLE abc DROP DENY FOR DAY 'Wednesday';
SELECT r.rolname, d.start_day, d.start_time, d.end_day, d.end_time
FROM pg_auth_time_constraint d join pg_roles r ON (d.authid = r.oid)
WHERE r.rolname = 'abc'
ORDER BY r.rolname, d.start_day, d.start_time, d.end_day, d.end_time;
DROP ROLE IF EXISTS abc;
SELECT r.rolname, d.start_day, d.start_time, d.end_day, d.end_time
FROM pg_auth_time_constraint d join pg_roles r ON (d.authid = r.oid)
WHERE r.rolname = 'abc'
ORDER BY r.rolname, d.start_day, d.start_time, d.end_day, d.end_time;