我刚开始运行 pgAdmin 4,并且在尝试将 CSV 文件加载到我的表中时收到以下错误消息:
ERROR: malformed range literal: "2023-08-01 00-00"
DETAIL: Missing left parenthesis or bracket.
CONTEXT: COPY aug2023_trip, line 2, column started_at: "2023-08-01 00-00"
这是
CREATE TABLE
声明:
CREATE TABLE IF NOT EXISTS public.aug2023_trip
(
ride_id character varying(100) COLLATE pg_catalog."default",
rieable_type character varying(100) COLLATE pg_catalog."default",
started_at tsrange,
ended_at tsrange,
ride_length time without time zone,
day_of_week smallint,
start_station_name character varying(100) COLLATE pg_catalog."default",
start_staion_id character varying(100) COLLATE pg_catalog."default",
end_station_name character varying(100) COLLATE pg_catalog."default",
end_station_id character varying(100) COLLATE pg_catalog."default",
start_lat numeric,
start_lng numeric,
end_lat numeric,
end_lng numeric,
member_casual character varying(50) COLLATE pg_catalog."default"
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.aug2023_trip
OWNER to postgres;
我在没有
started_at
、ended_at
和 ride_length
列的情况下运行了测试,并将数据加载到数据库中。
所以错误在于
started_at
、ended_at
和 ride-length
的列数据类型。
任何人都可以提示我为什么收到此错误消息吗?
tsrange
类型的常量应该如下所示:
[2023-08-01 00:00:00,2023-08-01 12:00:00)
我认为真正的问题是你选择了错误的数据类型。
根据错误消息中的名称和常量,我认为
started_at
和 ended_at
应该是 timestamp with time zone
,或者将它们存储在 start_end
类型的单列 tstzrange
中(但您必须更改后者的 CSV 文件)。
ride_length
应该是 interval
,但如果这只是 ended_at - started_at
,则您根本不应该存储该(冗余)信息,因为您始终可以即时计算它。