私は別のテーブルに一つのテーブルから列をコピーする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
、含む自動:
ありがとうございます!私はMySQLのバックグラウンドから来ているので、このタイプのクエリでカラムを指定する必要はありません。それはうまくいった。 –
@BradDwyer:あなた**は**ターゲットテーブルのすべての列を指定していない場合(または選択リストの順序が列の定義された順序と一致しない場合はMySQLの列も指定する必要があります。表) –