postgresql “COPY FROM table”列与.csv文件不匹配

yhxst69z  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(217)

我试图通过pgadmin将数据从.csv文件导入到创建的表中。
总结:

错误:process watcher

  • 值“阿灵顿”属于列“AccountCity”。Pgadmin认为它在“AccountState”列中。
  • 这意味着.csv和postgresql表之间有一列的偏移量。
  • 列“AccountState”约束被设置为长度为“2”的“字符”,因为状态值是缩写形式的(例如,Arizona -> AZ)。
    问题:*-如何确保列匹配?

我检查了一下:

  • .csv文件和数据库表中的列名相同。
  • .csv文件中的逗号数是每行17个,因此意味着18列。

我也试过:

  • 通过查询工具代码查询每一列。请参见下面的代码。
    从“C:\Users\Nacho\OneDrive\Data Tools Practice\Personal Projects\Project2_Combined(Edited)Premium_Data_Group Project Dataset Group 6.csv”CSV HEADER LIMITER“,”复制premiums_data(EvaluationID、EvaluationDate、AccountNumber、AccountName、AccountStreetNumber、AccountStreetname、AccountStreetSuffix、AccountCity、AccountState、AccountUnderwriter、PolicyNumber、PolicyType、PolicyExpirationDate、PolicyExpirationDate、LineofBusiness、ExposureBase、ExposureBound、PremiumBound);
  • Pgadmin返回process watcher
  • Pgadmin现在认为第一列不存在。
qvk1mo1f

qvk1mo1f1#

第一个错误是由于AccountStreetSuffix是文件的第7列,而您的表定义和copy列列表将其放在最后。因此,所有的东西都向左移动,把city错放成了suffix,把state错放成了city,把underwriter错放成了state。我猜Arlingtoncityunderwriter中都有,而你假设是第一个。
第二个错误是因为copy命令列列表没有在区分大小写的列名周围使用双引号:"EvaluationID"EvaluationID不同。前者被解释为区分大小写的标识符,后者被折叠为,这就是为什么你可以在错误消息中看到它最终是evaluationid。您需要在代码中的任何地方或任何地方使用双引号引用标识符,除非它们都是双引号。如果您使用双引号创建了表列,那么也可以在COPY列列表中使用它们。

相关问题