我试图通过pgadmin将数据从.csv文件导入到创建的表中。
总结:
- 有18列。.csv file viewed in MS Exceltable columns in pgadmin navigation pane
- 原始数据为.xlsx,通过MS Excel的 Export 转换为.csv。
- 列“EvaluationID”是我在Excel中添加的,作为导入的主键。
- 日期采用ISO 8601标准(即YYYY/MM/DD)。
- 我使用pgadmin导航窗格导入,而不是使用查询工具。
- 值“阿灵顿”属于列“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现在认为第一列不存在。
1条答案
按热度按时间qvk1mo1f1#
第一个错误是由于
AccountStreetSuffix
是文件的第7列,而您的表定义和copy
列列表将其放在最后。因此,所有的东西都向左移动,把city
错放成了suffix
,把state
错放成了city
,把underwriter
错放成了state
。我猜Arlington
在city
和underwriter
中都有,而你假设是第一个。第二个错误是因为
copy
命令列列表没有在区分大小写的列名周围使用双引号:"EvaluationID"
与EvaluationID
不同。前者被解释为区分大小写的标识符,后者被折叠为,这就是为什么你可以在错误消息中看到它最终是evaluationid
。您需要在代码中的任何地方或任何地方使用双引号引用标识符,除非它们都是双引号。如果您使用双引号创建了表列,那么也可以在COPY
列列表中使用它们。