How to import Geonames data into PostgreSQL on Windows
Published on 6/18/2014
- Download http://download.geonames.org/export/dump/allCountries.zip (251MB) to %ProgramData%\geonames, and unzip it.
- In PostgreSQL, create a table to import the data into:
create table geonames (
geoname_id int primary key,
name text,
ascii_name text,
alternate_names text,
latitude numeric(8,6),
longitude numeric(9,6),
feature_class char(1),
feature_code text,
country_code char(2),
cc2 TEXT,
admin1_code text,
admin2_code text,
admin3_code text,
admin4_code text,
population bigint,
elevation int,
dem text,
timezone text,
modification_date date
);
Run the COPY command:
copy geonames
from 'c:/programdata/geonames/allCountries/allCountries.txt'
with (
format text,
null ''
)
On my laptop it took ~65 seconds. There were 9,071,443 rows.
Let’s say we just want to view the ISO 3166-1 countries. Lets’s create an index on the feature_code column so we can quickly filter on it (warning, this can take a while):
create index on geonames (feature_code);
And now a view to show only the ISO countries:
create view iso_countries as
select
*
from geonames
where
(
feature_code IN ( 'PCL', 'PCLD', 'PCLF', 'PCLI', 'PCLIX', 'PCLS' )
or geoname_id in (2461445, 5880801, 607072, 6697173) --western sahara, american samoa, svalbar and jan mayen, antarctica
)
and geoname_id <> 831053 --kosovo
order by
country_code;
... views