将文件内容复制到PVC中的Postgres表中

时间:2020-04-05 02:52:47

标签: postgresql kubernetes

努力让我的大脑包住这个...

因此,我需要在如下所示的PHP程序中执行Postgres COPY命令:

COPY _data_20200404_193855 FROM '/mnt/files/imports/CopyFlatFile.csv.tab' DELIMITER E'\t' CSV HEADER

/mnt/files/xls-imports/CopyFlatFile.csv.tab是PVC位置,但Postgres Pod认为它是Pod中的位置,因此它说找不到文件。

我可以使用scpkubectl cp的组合手动将文件移出PVC并移到Postgres Pod中,将命令复制到pgAdmin并运行后,该命令可以完美执行。

这不是理想的方法,效率也不高,因为我希望程序能够处理它。

有关如何处理此问题的任何建议?

在最坏的情况下,我将其重写以构造一个庞大的INSERT INTO语句,但是不确定它是否可以处理内存中保存的大量数据。如果没有,我将其分成较小的块。哎呀...

2 个答案:

答案 0 :(得分:1)

看来我什至没有将我的文件存储PVC连接到Postgres部署...做到了,现在可以正常工作了。我的监督。

是...

...
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/postgresql
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-storage
...

所以我将其更改为:

...
            - mountPath: /var/postgresql
              name: postgres-storage
            - mountPath: /mnt/files/xls-imports
              name: file-storage
              subPath: xls-imports
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-storage
        - name: file-storage
          persistentVolumeClaim:
            claimName: file-storage
...

答案 1 :(得分:0)

一个可能的选择是将相同的外部文件系统(例如NFS,CephFS或相应的SaaS版本,例如AWS EFS)挂载到ReadWriteMany access mode中的所有php和PostgreSQL pod中,并将其用作共享临时文件所有广告连播之间的目录。