首页>Database>source

在postgres中,我们可以执行COPy将数据导出到文件中.但是所有数据都将保存到文件中.但是我想将该文件分成小块.我们可以在导出后执行此操作。

但是有没有办法在COPy过程中将其导出?

psycopg2中的OR,我们可以这样做吗?

最新回答
  • 1月前
    1 #

    您可以使用 WHERE 条件:

    COPY (SELECT * FROM tab WHERE id % 3 = 0) TO '/dir/file1.csv' (FORMAT 'csv');
    COPY (SELECT * FROM tab WHERE id % 3 = 1) TO '/dir/file2.csv' (FORMAT 'csv');
    COPY (SELECT * FROM tab WHERE id % 3 = 2) TO '/dir/file3.csv' (FORMAT 'csv');
    

    这里 id 代表任何数字列.您还可以使用其他数据类型,并通过适当的 WHERE以其他方式拆分数据 条件。

  • 1月前
    2 #

    But is there a way to export it during the COPY process?

    通过 PROGRAM支持将COPy数据流式传输到程序中 条款。

    Unix命令 split 可以进行实际拆分.例如:

    COPY (<your query>) TO PROGRAM 'split -l 10000 -d - /path/file-';
    

    这会将输出拆分为顺序编号的文件,每个文件不超过10000行。

    PROGRAM psql的 \copy也支持该子句 ; 在这种情况下,程序将在客户端执行。

    注意:如果导出格式为CSV且有多行文本字段,则存在将字段拆分为多个文件的风险。

  • 1月前
    3 #

    如果您已经有一个大文件并且有 足够的磁盘空间,您可以使用下面的方法。

    假设您已使用复制命令创建了一个大文件;

    COPY (SELECT ... FROM ... WHERE ...) TO '/path/to/file';
    

    将文件拆分为块(仅Linux);

    split --number=l/10 --numeric-suffixes /path/to/file file_
    

  • mysql:SQL仅每个值的第一行
  • sql server:具有默认的完全备份模型和失控日志文件的经典傻瓜-如何控制它?