Class: OsmImport::Target::PgTables::TargetTable
- Inherits:
-
TargetEntry
- Object
- TargetEntry
- OsmImport::Target::PgTables::TargetTable
- Defined in:
- lib/osm_import/target/pg_tables.rb
Instance Method Summary collapse
- #add_geometry_column(column, type) ⇒ Object
- #create! ⇒ Object
- #deploy! ⇒ Object
- #import! ⇒ Object
- #indexes ⇒ Object
Instance Method Details
#add_geometry_column(column, type) ⇒ Object
42 43 44 45 46 47 48 |
# File 'lib/osm_import/target/pg_tables.rb', line 42 def add_geometry_column(column, type) if target.projection conn.exec "SELECT AddGeometryColumn('#{name}', '#{column}', #{target.projection}, '#{target.geometry_type type}', 2)" else conn.exec "ALTER TABLE #{name} ADD COLUMN #{column} GEOGRAPHY(#{target.geometry_type type}, 4326)" end end |
#create! ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/osm_import/target/pg_tables.rb', line 50 def create! conn.exec "CREATE TABLE #{name}(#{fields.map{|k,v| "#{k} #{v}"}.join(', ')})" add_geometry_column :geometry, table.type table.type_mapper.after_create self table.mappers.each do |key, mapper| mapper.after_create self end table.after_create_callbacks.each do |cb| instance_eval(&cb) end end |
#deploy! ⇒ Object
101 102 103 104 105 106 107 108 109 110 |
# File 'lib/osm_import/target/pg_tables.rb', line 101 def deploy! conn.exec "DROP TABLE IF EXISTS #{target.prefix}#{table.name}" conn.exec "ALTER TABLE #{name} RENAME TO #{target.prefix}#{table.name}" #conn.exec "ALTER INDEX #{name}_pkey RENAME TO #{target.prefix}#{table.name}_pkey" indexes.each do |key,_| conn.exec "ALTER INDEX #{name}_#{key}_index RENAME TO #{target.prefix}#{table.name}_#{key}_index" end end |
#import! ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/osm_import/target/pg_tables.rb', line 78 def import! unless table.type_mapper.mappings.empty? field_keys = fields.keys.to_a conn.exec "INSERT INTO #{name}(geometry, #{field_keys.join(', ')}) SELECT #{geometry_expr} AS geometry, #{field_keys.map{|k| "#{assigns[k]} AS #{k}"}.join(',')} FROM raw_osm_#{table.type.gsub('multi','')} src WHERE #{conditions.join(' AND ')}" end # Creating indexes indexes.each do |key, desc| conn.exec "CREATE INDEX #{name}_#{key}_index ON #{name} USING #{desc}" end table.type_mapper.after_import self table.mappers.each do |key, mapper| mapper.after_import self end table.after_import_callbacks.each do |cb| instance_eval(&cb) end end |
#indexes ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/osm_import/target/pg_tables.rb', line 65 def indexes @indexes ||= begin res = table.type_mapper.indexes res[:geometry] = "GIST(geometry)" table.mappers.each do |key,mapper| res.merge mapper.indexes end res end end |