From 6bc91c71258d8be8f5a4e18f4f692e532b05b5ff Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Mon, 17 Aug 2015 10:17:07 +0200 Subject: [PATCH 1/5] Using exception with pg_total_relation_size for better performance IF EXISTS is too slow, one order of magnitude, than using exception handling. In combination with thousands of tables to check total relation size that's a problem. Exception handles specifically undefined_table as it was the original issue but also any other exception to guarantee a size is always returned and no error is raised. --- scripts-available/CDB_Quota.sql | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/scripts-available/CDB_Quota.sql b/scripts-available/CDB_Quota.sql index 3474f48..8e6a872 100644 --- a/scripts-available/CDB_Quota.sql +++ b/scripts-available/CDB_Quota.sql @@ -1,18 +1,15 @@ CREATE OR REPLACE FUNCTION cartodb._CDB_total_relation_size(_schema_name TEXT, _table_name TEXT) RETURNS bigint AS $$ +DECLARE relation_size bigint := 0; BEGIN - IF EXISTS ( - SELECT 1 FROM information_schema.tables - WHERE table_catalog = current_database() - AND table_schema = _schema_name - AND table_name = _table_name - ) - THEN - RETURN pg_total_relation_size(format('"%s"."%s"', _schema_name, _table_name)); - ELSE - RETURN 0; - END IF; + BEGIN + SELECT pg_total_relation_size(format('"%s"."%s"', _schema_name, _table_name)) INTO relation_size; + EXCEPTION + WHEN undefined_table OR OTHERS THEN + RAISE NOTICE 'caught undefined_table: "%"."%"', _schema_name, _table_name; + END; + RETURN relation_size; END; $$ LANGUAGE 'plpgsql' VOLATILE; From 50169e58d5a21657e4064b6b6329f53e7b34576c Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Mon, 17 Aug 2015 10:25:31 +0200 Subject: [PATCH 2/5] Raise better notice on _CDB_total_relation_size errors --- scripts-available/CDB_Quota.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts-available/CDB_Quota.sql b/scripts-available/CDB_Quota.sql index 8e6a872..77f9df5 100644 --- a/scripts-available/CDB_Quota.sql +++ b/scripts-available/CDB_Quota.sql @@ -7,7 +7,7 @@ BEGIN SELECT pg_total_relation_size(format('"%s"."%s"', _schema_name, _table_name)) INTO relation_size; EXCEPTION WHEN undefined_table OR OTHERS THEN - RAISE NOTICE 'caught undefined_table: "%"."%"', _schema_name, _table_name; + RAISE NOTICE 'cartodb._CDB_total_relation_size(''%'', ''%'') caught error: % (%)', _schema_name, _table_name, SQLERRM, SQLSTATE; END; RETURN relation_size; END; From 520024ecb0cbbd4419d6208a2c0dac5fbba0a8b7 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Tue, 18 Aug 2015 14:56:23 +0200 Subject: [PATCH 3/5] Update CONTRIBUTING.md --- CONTRIBUTING.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index affc544..94cd264 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,12 +49,16 @@ also installs migration scripts to go from "V" to "V"next and from "V"next to "V". Example to upgrade a 0.2.0dev version: ```sql -ALTER EXTENSION cartodb UPDATE TO '0.2.0devnext'; +ALTER EXTENSION cartodb UPDATE TO '0.2.0next'; ALTER EXTENSION cartodb UPDATE TO '0.2.0dev'; ``` - Starting with 0.2.0, the in-place reload can be done with an ad-hoc function: ```sql SELECT cartodb.cdb_extension_reload(); ``` + +A useful query: +```sql +postgres=# SELECT * FROM pg_extension_update_paths('cartodb') WHERE path IS NOT NULL; +``` From 7800e4e5a88230c89138fa9a39889f22dab2a686 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Tue, 18 Aug 2015 14:56:37 +0200 Subject: [PATCH 4/5] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 94cd264..2005111 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,5 +60,5 @@ SELECT cartodb.cdb_extension_reload(); A useful query: ```sql -postgres=# SELECT * FROM pg_extension_update_paths('cartodb') WHERE path IS NOT NULL; +SELECT * FROM pg_extension_update_paths('cartodb') WHERE path IS NOT NULL; ``` From b798130d234ffd5525850249a7309c963e9a1865 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Tue, 18 Aug 2015 15:08:35 +0200 Subject: [PATCH 5/5] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2005111..976b4ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,5 +60,5 @@ SELECT cartodb.cdb_extension_reload(); A useful query: ```sql -SELECT * FROM pg_extension_update_paths('cartodb') WHERE path IS NOT NULL; +SELECT * FROM pg_extension_update_paths('cartodb') WHERE path IS NOT NULL AND source = cdb_version(); ```