2016-10-17 6 views
1

私は別のテーブルに一つのテーブルから列をコピーするINSERT INTO ... SELECTステートメントを使用しようとしているが、私は、エラーメッセージ取得しています「整数のための無効な入力構文」:Postgresのvarchar列与えるエラー

gis=> INSERT INTO places (SELECT 0 AS osm_id, 0 AS code, 'country' AS fclass, pop_est::numeric(10,0) AS population, name, geom FROM countries); 
ERROR: invalid input syntax for integer: "country" 
LINE 1: ...NSERT INTO places (SELECT 0 AS osm_id, 0 AS code, 'country' ... 

SELECTを私は期待のようにそれ自体でステートメントが結果を与えている:

gis=> SELECT 0 AS osm_id, 0 AS code, 'country' AS fclass, pop_est::numeric(10,0) AS population, name, geom FROM countries LIMIT 1; 
osm_id | code | fclass | population | name |                                              geom                                              
--------+------+---------+------------+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
     0 | 0 | country |  103065 | Aruba | 0106000000010000000103000000010000000A000000333333338B7951C0C8CCCCCC6CE7284033333333537951C03033333393D82840CCCCCCCC4C7C51C06066666686E0284000000000448051C00000000040002940333333333B8451C0C8CCCCCC0C18294099999999418351C030333333B3312940333333333F8251C0C8CCCCCC6C3A294000000000487E51C000000000A0222940333333335B7A51C00000000000F62840333333338B7951C0C8CCCCCC6CE72840 
(1 row) 

しかし、それは実際には、それが実際にcharacter varying(20)あるとき、fclass列は整数でなければならないことに混乱思考を取得しているよう何とかそれが見えます

gis=> \d+ places 
                Unlogged table "public.places" 
    Column |   Type   |      Modifiers      | Storage | Stats target | Description 
------------+------------------------+------------------------------------------------------+----------+--------------+------------- 
gid  | integer    | not null default nextval('places_gid_seq'::regclass) | plain |    | 
osm_id  | bigint     |              | plain |    | 
code  | smallint    |              | plain |    | 
fclass  | character varying(20) |              | extended |    | 
population | numeric(10,0)   |              | main  |    | 
name  | character varying(100) |              | extended |    | 
geom  | geometry    |              | main  |    | 
Indexes: 
    "places_pkey" PRIMARY KEY, btree (gid) 
    "places_geom" gist (geom) 

すべての列を目的のテーブルにする必要がある正確な型にキャストしようとしましたが、それは効果がないようです。

オンラインで見つけることができる他のすべてのインスタンスは、定数文字列をfclassとして選択しているため、ここでは関係のない空の文字列を整数として使用しようとしているようです。 、すべての列が挿入されることを想定し、それらを個別に指定しない

INSERT INTO places (osm_id, code, fclass, population, name, geom) SELECT ... 

- あなたが持っているしたいgid、含む自動:

答えて

1

は、あなたがに挿入されているカラム名を指定する必要があります人口が多い。したがって、'country'は実際にはの文でcodeに挿入されています。

+0

ありがとうございます!私はMySQLのバックグラウンドから来ているので、このタイプのクエリでカラムを指定する必要はありません。それはうまくいった。 –

+1

@BradDwyer:あなた**は**ターゲットテーブルのすべての列を指定していない場合(または選択リストの順序が列の定義された順序と一致しない場合はMySQLの列も指定する必要があります。表) –

関連する問題