问题标签 [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.

0 投票
2 回答
843 浏览

python - PostgreSQL COPY 命令问题

在我的 Postgresql 数据库中,我创建了一个NAV_DATA包含五列的表:

对于这些列,我有分隔符 TAB\t和 Quotechar的 csv 文件"
它在中间列也有一些空字段。

如何允许在复制命令中接受空值?

我想插入列(name, call_type, date_created)。我的 csv 中没有该字段id

如何将特定列复制到数据库中?

问题还在于分隔符 TAB \t

0 投票
3 回答
45688 浏览

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 文件中的日期格式。
有没有办法根据实际格式将日期字符串转换为时间戳?

0 投票
2 回答
11884 浏览

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 文档的任何信息。

0 投票
2 回答
4690 浏览

php - 使用php将txt文件导入postgres时出现问题

我正在尝试使用“\copy”命令将 txt/csv 文件从 php 导入我的 postgres 数据库。我不能使用 COPY 代替 \copy,因为我需要它作为 psql 客户端执行。我的代码是:

当我运行这个 php 文件时,我得到这个错误:

0 投票
1 回答
12366 浏览

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

0 投票
2 回答
46056 浏览

postgresql - PostgreSQL 中的 COPY 函数

我想使用 PostgreSQL 中的 COPY 函数将 CSV 文件导入 PostgreSQL 数据库。

文档中提到文件名的地方,CSV 文件是否必须存储在特定位置,或者是否可以存储在任何位置。

例如,copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';。它在哪里说tmp,这是否意味着 C: 驱动器中的 tmp 文件夹。可以更改为另一个文件夹名称吗?

0 投票
2 回答
775 浏览

sql - 将矩阵从文件加载到 PostgreSQL 表中

我有一个文件 university.txt,如下所示:

.. 等等,在这种情况下,阿拉巴马州、阿拉斯加州和亚利桑那州是地点,其他地方都是大学。我想要做的是将位置加载到一个名为的表中Location,将大学加载到一个名为 的表中University,其中表Id的 是Location表的 FK University,如下所示:

所以我想在 Postgres 中做的是这样的:

任何人都知道如何做到这一点?

0 投票
1 回答
4454 浏览

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 脚本(或其他东西)来读取文件并试图弄清楚如何处理每条记录,但这感觉效率非常低,并且会导致大量往返。

最后的几件事:

  1. 我无法控制输入文件。如果他们只向我发送增量,我会很高兴,但他们没有,这完全超出了我的控制或影响。
  2. 他的系统正在增长,可能会添加新的数据源,这将大大增加正在处理的数据量(所以,我正在努力保持高效)
  3. 我知道这不是一个好的、简单的 SO 问题(例如“如何在 python 中对列表进行排序”),但我相信 SO 的一大优点是您可以提出棘手的问题,人们会分享他们对解决它的最好方法是。
0 投票
2 回答
3753 浏览

sql - 检查 Postgres 表中是否存在记录

我必须每 20 秒读取一次 CSV。每个 CSV 包含最小值。500到最大。60000 行。我必须在 Postgres 表中插入数据,但在此之前我需要检查项目是否已经插入,因为很可能会出现重复项目。检查唯一性的字段也被索引。

因此,我分块读取文件并使用 IN 子句获取数据库中已有的项目。

有更好的方法吗?

0 投票
11 回答
245305 浏览

postgresql - 将 PostgreSQL 表中的特定行导出为 INSERT SQL 脚本

我有一个名为:的数据库架构nyummy和一个名为cimory

我想将cimory表的数据导出为插入 SQL 脚本文件。但是,我只想导出城市等于“东京”的记录/数据(假设城市数据都是小写的)。

怎么做?

解决方案是在免费软件 GUI 工具还是命令行中都没有关系(尽管 GUI 工具解决方案更好)。我曾尝试过 pgAdmin III,但找不到执行此操作的选项。