void snapshot_selection::write_relations(output_formatter &formatter) {
  logger::message("Fetching relations");
  element_info elem;
  members_t members;
  tags_t tags;

  pqxx::result relations = w.prepared("extract_relations").exec();
  for (pqxx::result::const_iterator itr = relations.begin();
       itr != relations.end(); ++itr) {
    extract_elem(*itr, elem);
    extract_members(w.prepared("extract_relation_members")(elem.id).exec(),
                    members);
    extract_tags(w.prepared("extract_relation_tags")(elem.id).exec(), tags);
    formatter.write_relation(elem, members, tags);
  }
}
void 
readonly_pgsql_selection::write_relations(output_formatter &formatter) {
  logger::message("Fetching relations");
  element_info elem;
  members_t members;
  tags_t tags;
  
  formatter.start_element_type(element_type_relation);
  // fetch in chunks...
  set<osm_id_t>::iterator prev_itr = sel_relations.begin();
  size_t chunk_i = 0;
  for (set<osm_id_t>::iterator n_itr = sel_relations.begin();
       ; ++n_itr, ++chunk_i) {
    bool at_end = n_itr == sel_relations.end();
    if ((chunk_i >= STRIDE) || ((chunk_i > 0) && at_end)) {
      stringstream query;
      query << "select r.id, r.visible, r.version, r.changeset_id, "
        "to_char(r.timestamp,'YYYY-MM-DD\"T\"HH24:MI:SS\"Z\"') as timestamp from "
        "current_relations r where r.id in (";
      std::copy(prev_itr, n_itr, infix_ostream_iterator<osm_id_t>(query, ","));
      query << ")";
      pqxx::result relations = w.exec(query);
      
      for (pqxx::result::const_iterator itr = relations.begin(); 
           itr != relations.end(); ++itr) {
        extract_elem(*itr, elem, cc);
        extract_members(w.prepared("extract_relation_members")(elem.id).exec(), members);
        extract_tags(w.prepared("extract_relation_tags")(elem.id).exec(), tags);
        formatter.write_relation(elem, members, tags);
      }
      
      chunk_i = 0;
      prev_itr = n_itr;
    }
    
    if (at_end) break;
  }
  formatter.end_element_type(element_type_relation);
}