Fix recursive DDL trigger on create table

Closes #32
This commit is contained in:
Sandro Santilli
2014-05-28 09:02:02 +02:00
parent 85cc74b4f4
commit 2601364011
3 changed files with 69 additions and 13 deletions
+45 -6
View File
@@ -32,6 +32,11 @@ NOTICE: trigger "update_the_geom_webmercator_trigger" for table "c.t3" does not
NOTICE: trigger "update_updated_at_trigger" for table "c.t3" does not exist, skipping NOTICE: trigger "update_updated_at_trigger" for table "c.t3" does not exist, skipping
NOTICE: trigger "test_quota" for table "c.t3" does not exist, skipping NOTICE: trigger "test_quota" for table "c.t3" does not exist, skipping
NOTICE: trigger "test_quota_per_row" for table "c.t3" does not exist, skipping NOTICE: trigger "test_quota_per_row" for table "c.t3" does not exist, skipping
NOTICE: event trigger "cdb_on_relation_create" does not exist, skipping
NOTICE: event trigger "cdb_on_relation_drop" does not exist, skipping
NOTICE: event trigger "cdb_on_alter_column" does not exist, skipping
NOTICE: event trigger "cdb_on_drop_column" does not exist, skipping
NOTICE: event trigger "cdb_on_add_column" does not exist, skipping
NOTICE: cdb_invalidate_varnish(c.t3) called NOTICE: cdb_invalidate_varnish(c.t3) called
select select
cartodb_id, created_at=updated_at as "c=u", cartodb_id, created_at=updated_at as "c=u",
@@ -47,12 +52,46 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)) as age round(extract('secs' from now() - updated_at)) as age
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
tabname | age tabname | age
---------+----- ---------+-----
c.t3 | 0 c.t3 | 0
(1 row) (1 row)
-- Table with cartodb_id field, see
-- http://github.com/CartoDB/cartodb-postgresql/issues/32
select 1 as cartodb_id INTO c.t4;
NOTICE: trigger "track_updates" for table "c.t4" does not exist, skipping
NOTICE: trigger "update_the_geom_webmercator_trigger" for table "c.t4" does not exist, skipping
NOTICE: trigger "update_updated_at_trigger" for table "c.t4" does not exist, skipping
NOTICE: trigger "test_quota" for table "c.t4" does not exist, skipping
NOTICE: trigger "test_quota_per_row" for table "c.t4" does not exist, skipping
NOTICE: Column cartodb_id already exists
NOTICE: event trigger "cdb_on_relation_create" does not exist, skipping
NOTICE: event trigger "cdb_on_relation_drop" does not exist, skipping
NOTICE: event trigger "cdb_on_alter_column" does not exist, skipping
NOTICE: event trigger "cdb_on_drop_column" does not exist, skipping
NOTICE: event trigger "cdb_on_add_column" does not exist, skipping
NOTICE: cdb_invalidate_varnish(c.t4) called
select
cartodb_id, created_at=updated_at as "c=u",
NOW() - updated_at < '1 secs' as "u<1s",
the_geom, the_geom_webmercator
from c.t4;
cartodb_id | c=u | u<1s | the_geom | the_geom_webmercator
------------+-----+------+----------+----------------------
1 | t | t | |
(1 row)
select
tabname::text,
round(extract('secs' from now() - updated_at)) as age
FROM CDB_TableMetadata WHERE tabname = 'c.t4'::regclass;
tabname | age
---------+-----
c.t4 | 0
(1 row)
---------------------------- ----------------------------
-- ALTER TABLE RENAME COLUMN -- ALTER TABLE RENAME COLUMN
---------------------------- ----------------------------
@@ -87,7 +126,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
tabname | agecs tabname | agecs
---------+------- ---------+-------
c.t3 | 0 c.t3 | 0
@@ -124,7 +163,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
tabname | agecs tabname | agecs
---------+------- ---------+-------
c.t3 | 0 c.t3 | 0
@@ -164,7 +203,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
tabname | agecs tabname | agecs
---------+------- ---------+-------
c.t3 | 0 c.t3 | 0
@@ -195,7 +234,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
tabname | agecs tabname | agecs
---------+------- ---------+-------
c.t3 | 0 c.t3 | 0
@@ -206,7 +245,7 @@ FROM CDB_TableMetadata;
---------------------------- ----------------------------
RESET SESSION AUTHORIZATION; RESET SESSION AUTHORIZATION;
drop schema c cascade; drop schema c cascade;
NOTICE: drop cascades to table c.t3 NOTICE: drop cascades to 2 other objects
select count(*) from CDB_TableMetadata; select count(*) from CDB_TableMetadata;
count count
------- -------
+4
View File
@@ -24,9 +24,13 @@ BEGIN
RETURN; RETURN;
END IF; END IF;
PERFORM cartodb.cdb_disable_ddl_hooks();
-- CDB_CartodbfyTable must not create tables, or infinite loop will happen -- CDB_CartodbfyTable must not create tables, or infinite loop will happen
PERFORM cartodb.CDB_CartodbfyTable(event_info.relation); PERFORM cartodb.CDB_CartodbfyTable(event_info.relation);
PERFORM cartodb.cdb_enable_ddl_hooks();
RAISE DEBUG 'Inserting into cartodb.CDB_TableMetadata'; RAISE DEBUG 'Inserting into cartodb.CDB_TableMetadata';
-- Add entry to CDB_TableMetadata (should CartodbfyTable do this?) -- Add entry to CDB_TableMetadata (should CartodbfyTable do this?)
+18 -5
View File
@@ -29,7 +29,20 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)) as age round(extract('secs' from now() - updated_at)) as age
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
-- Table with cartodb_id field, see
-- http://github.com/CartoDB/cartodb-postgresql/issues/32
select 1 as cartodb_id INTO c.t4;
select
cartodb_id, created_at=updated_at as "c=u",
NOW() - updated_at < '1 secs' as "u<1s",
the_geom, the_geom_webmercator
from c.t4;
select
tabname::text,
round(extract('secs' from now() - updated_at)) as age
FROM CDB_TableMetadata WHERE tabname = 'c.t4'::regclass;
---------------------------- ----------------------------
-- ALTER TABLE RENAME COLUMN -- ALTER TABLE RENAME COLUMN
@@ -48,7 +61,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
select pg_sleep(.1); select pg_sleep(.1);
alter table c.t3 rename column the_geom_webmercator to webmerc2; alter table c.t3 rename column the_geom_webmercator to webmerc2;
@@ -63,7 +76,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
---------------------------- ----------------------------
-- ALTER TABLE DROP COLUMN -- ALTER TABLE DROP COLUMN
@@ -82,7 +95,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
---------------------------- ----------------------------
-- ALTER TABLE ADD COLUMN -- ALTER TABLE ADD COLUMN
@@ -101,7 +114,7 @@ from c.t3;
select select
tabname::text, tabname::text,
round(extract('secs' from now() - updated_at)*10) as agecs round(extract('secs' from now() - updated_at)*10) as agecs
FROM CDB_TableMetadata; FROM CDB_TableMetadata WHERE tabname = 'c.t3'::regclass;
---------------------------- ----------------------------
-- DROP TABLE -- DROP TABLE