当前位置: 首页 > 面试题库 >

从具有单引号数据的csv文件中加载postgreSQL数据的正确COPY命令?

颛孙和颂
2023-03-14
问题内容

我有一个csv文件,其内容如下:

10,53073,0,0,'Y','2008-05-30 21:46:55',0,'2008-05-30 21:48:04',0,53071,2

我想将csv数据加载到my_table中。

CREATE TABLE my_table
(
  ad_tree_id numeric(10,0) NOT NULL,
  node_id numeric(10,0) NOT NULL,
  ad_client_id numeric(10,0) NOT NULL,
  ad_org_id numeric(10,0) NOT NULL,
  isactive character(1) NOT NULL DEFAULT 'Y'::bpchar,
  created timestamp without time zone NOT NULL DEFAULT now(),
  createdby numeric(10,0) NOT NULL,
  updated timestamp without time zone NOT NULL DEFAULT now(),
  updatedby numeric(10,0) NOT NULL,
  parent_id numeric(10,0),
  seqno numeric(10,0),
  CONSTRAINT ad_treenodemm_pkey PRIMARY KEY (ad_tree_id , node_id ),
  CONSTRAINT adtree_adtreenodemm FOREIGN KEY (ad_tree_id)
      REFERENCES ad_tree (ad_tree_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
  CONSTRAINT ad_treenodemm_isactive_check CHECK (isactive = ANY (ARRAY['Y'::bpchar, 'N'::bpchar]))
)

当我在pgAdmin III工具中运行此命令时:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV;

我收到错误消息:

ERROR:  value too long for type character(1)
CONTEXT:  COPY my_table, line 1, column isactive: "'Y'"

然后我修改了这样的命令:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE ''';
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'';
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'' ESCAPE '\';
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'' ESCAPE \;

尝试全部失败。

那么,任何人都可以在这种情况下向我显示正确的COPY命令?


问题答案:

双引号(如果standard_conforming_strings已启用,请参阅docs)

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '''';

或使用非标准的PostgreSQL专用转义字符串:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE E'\'';


 类似资料:
  • 我从几个csv文件迭代上传节点和边,每个节点类型一个。加载节点工作得很好,但加载边并不总是有效。实际上,有些节点有数字作为标识符--如果是这样的话,所有这种类型的节点都有数字--但加载为字符串,因此创建边失败。手动创建一个边,添加用双引号包装标识符,效果很好。 边缘: 密码命令:

  • 问题内容: 我有一堆需要加载到MySQL数据库中的CSV数据。好吧,也许是CSV格式的。( 编辑 :实际上,它看起来像RFC4180中描述的内容) 每行是一个用逗号分隔的双引号字符串的列表。要转义出现在列值中的任何双引号,请使用双引号。允许使用反斜杠表示自己。 例如,该行: 如果解析为JSON,则应为: 我正在尝试使用读取CSV,但是我遇到了一些奇怪的行为。 例如,考虑我是否有一个简单的两列表 如

  • 我有以下实体,正在使用liquibase 要使用liquibase加载示例数据,请使用以下csv文件。 以及参考文件的内容 液化酶的定义如下: 然而,当使用hibernate加载数据时,我遇到以下错误。 然后我发现了这个网站http://www.solewing.org/blog/2015/08/hibernate-postgresql-and-lob-string/它说postgres将文本存储

  • 当通过数据库加载csv时,第2行下面的第4列没有加载。CSV的列数每行不同。 null 但是没有将上面的rdd转换为dataframe会导致错误 df2=sqlcontext.read.format(“com.databricks.spark.csv”).schema(模式).load(“sample_files/test_01.csv”) df2.show() df2.show() 但是,当no

  • 问题内容: 我正在尝试从D3中的CSV文件加载数据;我有以下代码: 如果我使用D3 v4,它可以正常工作,但是如果我切换到v5,它将不再起作用。有人可以向我解释如何修改代码以使其与D3 v5兼容吗? 问题答案: d3 v5使用访存API并返回要求以下代码的Promise。 万一将来人们想要v4。另一方面,d3v4使用XMLHttpRequest方法,并且不返回要求此代码的Promise csv加载