问题标签 [postgresql-copy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - PostgreSQL COPY 命令问题
在我的 Postgresql 数据库中,我创建了一个NAV_DATA
包含五列的表:
对于这些列,我有分隔符 TAB\t
和 Quotechar的 csv 文件"
。
它在中间列也有一些空字段。
如何允许在复制命令中接受空值?
我想插入列(name, call_type, date_created)
。我的 csv 中没有该字段id
。
如何将特定列复制到数据库中?
问题还在于分隔符 TAB \t
?
postgresql - 如何在不知道日期格式的情况下将日期字符串转换为时间戳
我正在尝试编写查询以将值插入timestamp with no timezone data
类型字段。该值来自 CSV 文件。
我正在使用的版本是PostgreSQL 8.1.21。
CSV 文件上传由客户端完成,它有一个日期列。日期有时以格式出现'28-Sep-13'
,有时以'28/09/2013'
格式出现。
我尝试使用以下内容将字符串转换为时间戳:
str_date::timestamp
.
如果str_date
是类似的东西,这可以正常工作,但如果传入的日期具有 format ,则在发生此错误时'28-Sep-13'
它将不起作用:'28/09/2013'
基本上,客户端会不断更改上传的 CSV 文件中的日期格式。
有没有办法根据实际格式将日期字符串转换为时间戳?
postgresql - PostgreSQL 的 COPY 语句
使用 PostgreSQL 的 COPY 语句,我们可以将文本文件中的数据加载到数据库的表中,如下所示:
COPY CME_ERROR_CODES FROM E'C:\\Program Files\\ERROR_CODES\\errcodes.txt' DELIMITER AS '~'
上面的语句是从一台具有 postgresql 客户端的机器上运行的,而服务器在另一台 Windows 机器上。运行上述语句是在抱怨我ERROR: could not open file "C:\Program Files\ERROR_CODES\errcodes.txt" for reading: No such file or directory
。
经过一番研究,我观察到该COPY
语句正在postgresql服务器的机器上的同一路径(C:\ Program Files \ ERROR_CODES)中寻找加载器文件(errcodes.txt)。为了测试这一点,我在 postgresql 服务器的机器上创建了相同的文件夹结构,并将 errcodes.txt 文件保存在那里。然后 COPY 语句运行良好。COPY 语句对我来说看起来非常严格。是否需要任何设置来避免这种情况?还是 COPY 语句的行为?我没有找到有关 PostgreSQL 文档的任何信息。
php - 使用php将txt文件导入postgres时出现问题
我正在尝试使用“\copy”命令将 txt/csv 文件从 php 导入我的 postgres 数据库。我不能使用 COPY 代替 \copy,因为我需要它作为 psql 客户端执行。我的代码是:
当我运行这个 php 文件时,我得到这个错误:
postgresql - 在字符串值中使用逗号导入 CSV
我正在尝试将一个简单的 CSV 导入 Postgres 8.4 数据库:
这是一张表:
这是一个 CSV 文件示例:
查询:
抛出异常:
但是,CSV 解析不是火箭科学,我想知道如果不重新格式化源 CSV 文件是否无法解决。
输入来自第 3 方,我无法更改格式。
(我知道我可以在导入之前预处理以更改分隔符。)
最终解决方案:
最初取自https://stackoverflow.com/a/9682174/251311,文档页面是http://www.postgresql.org/docs/8.4/static/sql-copy.html
postgresql - PostgreSQL 中的 COPY 函数
我想使用 PostgreSQL 中的 COPY 函数将 CSV 文件导入 PostgreSQL 数据库。
在文档中提到文件名的地方,CSV 文件是否必须存储在特定位置,或者是否可以存储在任何位置。
例如,copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';
。它在哪里说tmp
,这是否意味着 C: 驱动器中的 tmp 文件夹。可以更改为另一个文件夹名称吗?
sql - 将矩阵从文件加载到 PostgreSQL 表中
我有一个文件 university.txt,如下所示:
.. 等等,在这种情况下,阿拉巴马州、阿拉斯加州和亚利桑那州是地点,其他地方都是大学。我想要做的是将位置加载到一个名为的表中Location
,将大学加载到一个名为 的表中University
,其中表Id
的 是Location
表的 FK University
,如下所示:
所以我想在 Postgres 中做的是这样的:
任何人都知道如何做到这一点?
postgresql - 如何判断 Postgres 中的记录是否已更改
我有一些“upsert”类型的问题......但是,我想把它扔在那里,因为它与我在 stackoverflow 上读到的任何内容都有点不同。
基本问题。
我正在从 mysql 迁移到 PostgreSQL 9.1.5(托管在 Heroku 上)。作为其中的一部分,我需要每天导入多个 CSV 文件。有些数据是销售信息,几乎可以保证是新的,需要插入。但是,数据的其他部分几乎可以保证是相同的。例如,csv 文件(注意复数)将包含 POS(销售点)信息。这很少改变(很可能只是通过添加)。然后是产品信息。大约有 10,000 种产品(绝大多数将保持不变,但可以同时进行添加和更新)。
最后一项(但很重要)是我要求能够为任何给定项目提供审计跟踪/信息。例如,如果我添加了一条新的 POS 记录,我需要能够将其追溯到它所在的文件。如果我更改了 UPC 代码或产品描述,那么我需要能够追溯它到更改来自的导入(和文件)。
我正在考虑的解决方案。
由于数据是通过 CSV 提供给我的,因此我正在考虑 COPY 将是最佳/最快方式的想法。文件中的数据结构并不完全是我在数据库中的结构(即最终目的地)。因此,我将它们复制到与 CSV 匹配的暂存模式中的表中(注意:每个数据源一个模式)。暂存模式中的表将有一个前插入行触发器。这些触发器可以决定如何处理数据(插入、更新或忽略)。
对于最有可能包含新数据的表,它会先尝试插入。如果记录已经存在,那么它将返回 NULL(并停止插入临时表)。对于很少更改的表,那么它将查询该表并查看是否找到记录。如果是,那么我需要一种方法来查看是否有任何字段被更改。(因为请记住,我需要证明记录是通过从文件 y 中导入 x 来修改的)我显然可以将代码样板化并测试每一列。但是,正在寻找比这更“雄辩”和更易于维护的东西。
在某种程度上,我正在做的是将导入系统与审计跟踪系统结合起来。因此,在研究审计跟踪时,我查看了以下wiki.postgresql.org文章。看起来 hstore 可能是获取更改的好方法(并且能够轻松忽略表中不重要的某些列 - 例如“last_modified”)
我大约有 90% 的把握这一切都会奏效......我已经创建了一些测试表等并使用它。
我的问题?
是一种更好、更易于维护的方式来完成从 10K 中查找可能需要更改数据库的 3 条记录的任务。我当然可以编写一个 python 脚本(或其他东西)来读取文件并试图弄清楚如何处理每条记录,但这感觉效率非常低,并且会导致大量往返。
最后的几件事:
- 我无法控制输入文件。如果他们只向我发送增量,我会很高兴,但他们没有,这完全超出了我的控制或影响。
- 他的系统正在增长,可能会添加新的数据源,这将大大增加正在处理的数据量(所以,我正在努力保持高效)
- 我知道这不是一个好的、简单的 SO 问题(例如“如何在 python 中对列表进行排序”),但我相信 SO 的一大优点是您可以提出棘手的问题,人们会分享他们对解决它的最好方法是。
sql - 检查 Postgres 表中是否存在记录
我必须每 20 秒读取一次 CSV。每个 CSV 包含最小值。500到最大。60000 行。我必须在 Postgres 表中插入数据,但在此之前我需要检查项目是否已经插入,因为很可能会出现重复项目。检查唯一性的字段也被索引。
因此,我分块读取文件并使用 IN 子句获取数据库中已有的项目。
有更好的方法吗?
postgresql - 将 PostgreSQL 表中的特定行导出为 INSERT SQL 脚本
我有一个名为:的数据库架构nyummy
和一个名为cimory
:
我想将cimory
表的数据导出为插入 SQL 脚本文件。但是,我只想导出城市等于“东京”的记录/数据(假设城市数据都是小写的)。
怎么做?
解决方案是在免费软件 GUI 工具还是命令行中都没有关系(尽管 GUI 工具解决方案更好)。我曾尝试过 pgAdmin III,但找不到执行此操作的选项。