gtfsフィードの一部のデータに対して非正規化テーブルを追加したいとします。そのために私は新しいテーブルを作成:PostgreSQLが値を誤って挿入する
CREATE TABLE denormalized_trips (
stops_coords json NOT NULL,
stops_object json NOT NULL,
agency_key text NOT NULL,
trip_id text NOT NULL,
route_id text NOT NULL,
service_id text NOT NULL,
shape_id text,
route_color text,
route_long_name text,
route_desc text,
direction_id text
);
CREATE INDEX denormalized_trips_index ON denormalized_trips (agency_key, trip_id);
CREATE UNIQUE INDEX denormalized_trips_index ON denormalized_trips (agency_key, route_id);
は、今私は、INSERT文を介して他の1つのテーブルからデータを転送します。ステートメントはかなり複雑です。
INSERT INTO denormalized_trips
SELECT
trps.stops_coords,
trps.stops_object,
trps.trip_id,
trps.service_id,
trps.route_id,
trps.direction_id,
trps.agency_key,
trps.shape_id,
trps.route_color,
trps.route_long_name,
trps.route_desc
FROM (
SELECT
array_to_json(ARRAY_AGG(array[stop_lat, stop_lon])) AS stops_coords,
array_to_json(ARRAY_AGG(array[
stops.stop_id,
CAST (stop_times.stop_sequence AS TEXT),
stops.stop_name,
stop_times.departure_time,
CAST (stop_times.departure_time_seconds AS TEXT),
stop_times.arrival_time,
CAST (stop_times.arrival_time_seconds AS TEXT)
])) AS stops_object,
trips.trip_id,
trips.service_id,
trips.direction_id,
trips.agency_key,
trips.shape_id,
routes.route_id,
routes.route_color,
routes.route_long_name,
routes.route_desc
FROM gtfs_stop_times AS stop_times
INNER JOIN gtfs_trips AS trips
ON trips.trip_id = stop_times.trip_id AND trips.agency_key = stop_times.agency_key
INNER JOIN gtfs_routes AS routes ON trips.agency_key = routes.agency_key AND routes.route_id = trips.route_id
INNER JOIN gtfs_stops AS stops
ON stops.stop_id = stop_times.stop_id
AND stops.agency_key = stop_times.agency_key
AND NOT EXISTS (
SELECT 0
FROM denormalized_max_stop_sequence AS max
WHERE max.agency_key = stop_times.agency_key
AND max.trip_id = stop_times.trip_id
AND max.trip_max = stop_times.stop_sequence
)
GROUP BY
trips.trip_id,
trips.service_id,
trips.direction_id,
trips.agency_key,
trips.shape_id,
routes.route_id,
routes.route_color,
routes.route_long_name,
routes.route_desc
) as trps
私はちょうど正しい結果を得るために内部選択ステートメントを実行するとします。
を(それはあまりにも長いですので、スクリーンショットは、すべてのテーブルを表示しません)しかし、私はINSERT文を実行し、テーブルの内容を表示する場合、私はこのような何かを得るでしょう:彼らはこのような何かを見て
内容が表の右の列に挿入されないことがあります。 agency_keyにtrip_idの値が設定され、direction_idがservice_idになりました(そして、さらに多くのテーブルが混乱しています)。
私の質問は、私の挿入ステートメントが新しく作成されたテーブルの間違った列に内容を挿入するということです。
ありがとうございました。
thats it!私は自分の選択した声明を並べ替え、今ではうまくいきます。それは私にかなりの頭痛を与えました。答えをありがとう –