Class: OsmImport::Target::PgTables::TargetTable

Inherits:
TargetEntry
  • Object
show all
Defined in:
lib/osm_import/target/pg_tables.rb

Instance Method Summary collapse

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

#indexesObject



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