Skip to content

Commit ae2811e

Browse files
committed
RHINENG-20474: default is faster than trigger
1 parent 142f483 commit ae2811e

3 files changed

Lines changed: 26 additions & 20 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
CREATE OR REPLACE FUNCTION set_first_reported()
2+
RETURNS TRIGGER AS
3+
$set_first_reported$
4+
BEGIN
5+
IF NEW.first_reported IS NULL THEN
6+
NEW.first_reported := CURRENT_TIMESTAMP;
7+
END IF;
8+
RETURN NEW;
9+
END;
10+
$set_first_reported$
11+
LANGUAGE 'plpgsql';
12+
13+
ALTER TABLE system_advisories ALTER COLUMN first_reported DROP DEFAULT;
14+
15+
SELECT create_table_partition_triggers('system_advisories_set_first_reported',
16+
$$BEFORE INSERT$$,
17+
'system_advisories',
18+
$$FOR EACH ROW EXECUTE PROCEDURE set_first_reported()$$);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
ALTER TABLE system_advisories ALTER COLUMN first_reported SET DEFAULT CURRENT_TIMESTAMP;
2+
3+
select drop_table_partition_triggers('system_advisories_set_first_reported', '', 'system_advisories', '');
4+
5+
DROP FUNCTION IF EXISTS set_first_reported();
6+

database_admin/schema/create_schema.sql

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS schema_migrations
77

88

99
INSERT INTO schema_migrations
10-
VALUES (134, false);
10+
VALUES (135, false);
1111

1212
-- ---------------------------------------------------------------------------
1313
-- Functions
@@ -33,19 +33,6 @@ $$
3333
SELECT CASE WHEN cond = TRUE THEN iftrue else iffalse END;
3434
$$ LANGUAGE SQL IMMUTABLE;
3535

36-
-- set_first_reported
37-
CREATE OR REPLACE FUNCTION set_first_reported()
38-
RETURNS TRIGGER AS
39-
$set_first_reported$
40-
BEGIN
41-
IF NEW.first_reported IS NULL THEN
42-
NEW.first_reported := CURRENT_TIMESTAMP;
43-
END IF;
44-
RETURN NEW;
45-
END;
46-
$set_first_reported$
47-
LANGUAGE 'plpgsql';
48-
4936
-- set_last_updated
5037
CREATE OR REPLACE FUNCTION set_last_updated()
5138
RETURNS TRIGGER AS
@@ -857,7 +844,7 @@ CREATE TABLE IF NOT EXISTS system_advisories
857844
rh_account_id INT NOT NULL,
858845
system_id BIGINT NOT NULL,
859846
advisory_id BIGINT NOT NULL,
860-
first_reported TIMESTAMP WITH TIME ZONE NOT NULL,
847+
first_reported TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
861848
status_id INT NOT NULL,
862849
PRIMARY KEY (rh_account_id, system_id, advisory_id),
863850
CONSTRAINT advisory_metadata_id
@@ -868,11 +855,6 @@ CREATE TABLE IF NOT EXISTS system_advisories
868855
SELECT create_table_partitions('system_advisories', 32,
869856
$$WITH (fillfactor = '70', autovacuum_vacuum_scale_factor = '0.05')$$);
870857

871-
SELECT create_table_partition_triggers('system_advisories_set_first_reported',
872-
$$BEFORE INSERT$$,
873-
'system_advisories',
874-
$$FOR EACH ROW EXECUTE PROCEDURE set_first_reported()$$);
875-
876858
GRANT SELECT, INSERT, UPDATE, DELETE ON system_advisories TO evaluator;
877859
-- manager needs to be able to update things like 'status' on a sysid/advisory combination, also needs to delete
878860
GRANT UPDATE, DELETE ON system_advisories TO manager;

0 commit comments

Comments
 (0)