2017-10-25 1 views
0

ファイナルテーブルにインポートされるCSVファイルをクリーンアップするために、一時テーブルを作成しました。ユーザーがCSVファイルを自由に編集できるという前提があるため、varcharデータ型で一時テーブルを作成しました。PostgreSQLのデータ挿入時にString値をIntegerにキャストする方法は?

一時テーブルがvarchar型を内のすべてのある間だけ整数(例えばNETWORK_IDとのagent_id)を受け入れファイナルテーブル内の列がある私は、不要なデータを取り除くためにいくつかのクエリを実行するが、問題は今ありますデータ・タイプ。

CREATE TABLE IF NOT EXISTS dummy_table(
    network_address varchar(128), 
    network_alias varchar(64), 
    network_id varchar(64) NOT NULL, 
    agent_id varchar(64), 
    agent_name varchar(64) NOT NULL, 
    property_value varchar(128) 
); 

CREATE TABLE IF NOT EXISTS main_table(
    network_address varchar(128), 
    network_alias varchar(64), 
    network_id int4 NOT NULL, 
    agent_id int4, 
    agent_name varchar(64) NOT NULL, 
    property_value varchar(128) 
); 

これを行うことで私の試みは、次のとおりです。

INSERT INTO main_table 
SELECT network_address, 
     network_alias, 
     CAST(network_id AS INTEGER), 
     CAST(agent_id AS INTEGER), 
     agent_name, 
     property_value 
FROM dummy_table; 

しかし、私はエラーが発生します。

ERROR: column "network_id" is of type integer but expression is of type character

私は多分私のキャストが間違っているか、おそらくダブルキャストが必要とされていると思われるが、私これが当てはまる場合は、どのようにして申請するかについては考えていない。あなたの考えやアイデアは高く評価されます。挿入を行うとき

答えて

1

、あなたは常に列を明示的に表示されるはずです:

INSERT INTO main_table (network_address, network_alias, network_id, agent_id, agent_name, property_value) 
    SELECT network_address, network_alias, network_id::INTEGER,  
      agent_id::INTEGER, agent_name, property_value 
    FROM dummy_table; 

が、私はこれが問題である100%を確認することはできません。ただし、挿入するテーブル名が定義されているテーブル名と異なるため、これが問題である可能性があります。

+0

誤ってテーブル名をタイプしましたが、すでに編集しました。私もあなたのソリューションを試して、はい、私の問題を修正しました。どうもありがとうございました! – Junior

関連する問題