diff --git a/app/models/carto/api_key.rb b/app/models/carto/api_key.rb index 952709edb1..df6c44560d 100644 --- a/app/models/carto/api_key.rb +++ b/app/models/carto/api_key.rb @@ -320,7 +320,9 @@ module Carto return unless databases.present? databases[:tables].each do |table| - check_table(table) + if (!check_table(table) && !check_view(table)) + raise Carto::UnprocesableEntityError.new("relation \"#{table[:schema]}.#{table[:name]}\" does not exist") + end end end @@ -338,9 +340,24 @@ module Carto raise_unprocessable_entity_error(e) end - if result && result.count.zero? - raise Carto::UnprocesableEntityError.new("relation \"#{table[:schema]}.#{table[:name]}\" does not exist") + result && !result.count.zero? + end + + def check_view(view) + begin + result = db_run(%{ + SELECT * + FROM + pg_views + WHERE + schemaname = #{db_connection.quote(view[:schema])} AND + viewname = #{db_connection.quote(view[:name])} + }) + rescue StandardError => e + raise_unprocessable_entity_error(e) end + + result && !result.count.zero? end def invalidate_cache