如何将逗号分隔文档导入PostgreSQL?无需手动给Timestamp加单引号
解决方案:无需手动添加单引号即可将CSV数据插入PostgreSQL
1. 先创建匹配数据类型的目标表
按照你指定的列类型,创建对应的数据库表:
CREATE TABLE target_table ( col1 integer, col2 integer, col3 smallint, col4 smallint, col5 integer, col6 numeric, col7 integer, col8 timestamp without time zone, col9 timestamp without time zone );
2. 使用COPY命令批量导入(推荐)
PostgreSQL的COPY命令可以直接解析CSV格式数据,自动识别timestamp类型,完全不需要手动给时间值加单引号,是批量插入数据最高效的方式。
方式一:从服务器本地文件导入
如果你的CSV数据已保存为文件(比如data.csv),执行以下SQL:
COPY target_table FROM '/path/to/your/data.csv' WITH ( FORMAT csv, HEADER, DELIMITER ',', NULL '' );
HEADER:表示第一行是表头,会自动匹配列顺序DELIMITER ',':指定数据分隔符为逗号NULL '':将空字段(比如第一列的空值)解析为SQL的NULL
方式二:本地客户端导入(无需服务器访问本地文件)
如果用psql客户端操作,使用\copy命令(客户端专属命令,以反斜杠开头)读取本地文件:
\copy target_table FROM '/local/path/to/data.csv' WITH ( FORMAT csv, HEADER, DELIMITER ',', NULL '' );
方式三:直接在psql中输入数据
如果不想保存为文件,可以直接在psql中输入数据,用标准输入模式:
\copy target_table FROM stdin WITH (FORMAT csv, HEADER, DELIMITER ',', NULL '') ,0,1,2,3,4,5,6 0,1,1,1,76.0,2.99,2005-05-25 11:30:37.000,2019-04-11 18:11:50 1,2,1,1,573.0,0.99,2005-05-28 10:35:23.000,2019-04-11 18:11:50 2,3,1,1,1185.0,5.99,2005-06-15 00:54:12.000,2019-04-11 18:11:50 3,4,1,2,1422.0,0.99,2005-06-15 18:02:53.000,2019-04-11 18:11:50 4,5,1,2,1476.0,9.99,2005-06-15 21:08:46.000,2019-04-11 18:11:50 5,6,1,1,1725.0,4.99,2005-06-16 15:18:57.000,2019-04-11 18:11:50 \.
输入完所有数据后,输入\.并回车结束导入。
为什么不需要手动加单引号?
COPY命令是直接按CSV格式解析原始数据,根据表的列类型自动转换值,不是将数据作为SQL语句的字符串部分处理,因此timestamp类型的日期时间字符串会被直接识别转换,不需要额外添加单引号。
内容的提问来源于stack exchange,提问作者yeonsook kwak
相关产品推荐
相关产品推荐

