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 문을 통해 한 테이블에서 다른 테이블로 데이터를 전송하고 싶습니다. 진술은 다소 복잡합니다.
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! 내 선택 진술을 재정렬하고 지금은 작동합니다. 그것은 나에게 두통을 줬다. 답변 해주셔서 감사합니다 –