Search Postgresql Archives

COPY statement REAL vs VARCHAR precision issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all,

  I'm using a COPY statement to load data into a PostGIS.  The issue I am 
facing is that if I define fields with the REAL type, the COPY will only 
preserve 4 decimals which is not sufficient for my application.

Here is the commands I'm running and a sample of the results :

CREATE TABLE sites (
   id VARCHAR(9) PRIMARY KEY,
   name VARCHAR(128),
   type VARCHAR(1),
   agency VARCHAR(128),
   status INTEGER,
   napsDesignated BOOLEAN,
   address VARCHAR(128),
   city VARCHAR(128),
   network VARCHAR(128),
   timeZone REAL,
   lat REAL,
   lon REAL,
   elevation REAL
);

COPY sites (
   id,
   name,
   type,
   agency,
   status,
   napsDesignated,
   address,
   city,
   network,
   timeZone,
   lat,
   lon,
   elevation
) FROM
   '/data/sites.csv'
WITH DELIMITER '|' CSV HEADER;

-- Then I use some PostGIS functions to convert the lat/lon into a geometry
-- The issue is independent of the GIS processing.

SELECT lat, lon FROM sites LIMIT 4;
--    lat   |   lon    
-- ---------+----------
--  47.5681 | -52.7022
--    47.56 | -52.7114
--  49.3208 | -57.3972
--  48.9495 | -57.9454
-- (4 rows)

-- If I define the fields as being VARCHAR instead of REAL, I get all
-- the decimals :

CREATE TABLE sites (
   id VARCHAR(9) PRIMARY KEY,
   name VARCHAR(128),
   type VARCHAR(1),
   agency VARCHAR(128),
   status INTEGER,
   napsDesignated BOOLEAN,
   address VARCHAR(128),
   city VARCHAR(128),
   network VARCHAR(128),
   timeZone REAL,
   lat VARCHAR(32),
   lon VARCHAR(32),
   elevation REAL
);

COPY sites (
   id,
   name,
   type,
   agency,
   status,
   napsDesignated,
   address,
   city,
   network,
   timeZone,
   lat,
   lon,
   elevation
) FROM
   '/data/sites.csv'
WITH DELIMITER '|' CSV HEADER;

SELECT lat, lon FROM sites LIMIT 4;
       lat        |        lon        
------------------+-------------------
 47.5680555555556 | -52.7022222222222
 47.56            | -52.7113888888889
 49.3208333333333 | -57.3972222222222
 48.949479        | -57.945387
(4 rows)


-- When I convert the lat/lon to GEOMETRY, the function takes a string as 
input.  Therefore, the precision depends on how the REAL are converted to 
strings. :

UPDATE sites SET
   position = GeomFromEWKT('SRID=4326;POINT(' || lon || ' ' || lat ||' ' || 
elevation || ')');

-- Are the values stored with all the possible precision of a REAL or are they 
stored as displayed?

-- Is it because of the behaviour of the COPY statement?


Thank you for your help!


Samuel

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux