努力让我的大脑包住这个...
因此,我需要在如下所示的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中的位置,因此它说找不到文件。
我可以使用scp
和kubectl cp
的组合手动将文件移出PVC并移到Postgres Pod中,将命令复制到pgAdmin并运行后,该命令可以完美执行。
这不是理想的方法,效率也不高,因为我希望程序能够处理它。
有关如何处理此问题的任何建议?
在最坏的情况下,我将其重写以构造一个庞大的INSERT INTO
语句,但是不确定它是否可以处理内存中保存的大量数据。如果没有,我将其分成较小的块。哎呀...
答案 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中,并将其用作共享临时文件所有广告连播之间的目录。