使用 pgAdmin 4 加载 CSV 文件时出现“格式错误的范围文字”错误

问题描述 投票:0回答:1

我刚开始运行 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
的列数据类型。

任何人都可以提示我为什么收到此错误消息吗?

postgresql sqldatatypes pgadmin-4
1个回答
0
投票

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
    ,则您根本不应该存储该(冗余)信息,因为您始终可以即时计算它。

© www.soinside.com 2019 - 2024. All rights reserved.