Есть ли более эффективный способ массового импорта файлов в PostgreSQL? - PullRequest
0 голосов
/ 18 марта 2019

Я должен массово импортировать кучу файлов, которые в сумме составляют примерно 1 ТБ. Каждый файл занимает примерно 150 МБ.

Мне нужно импортировать все файлы в базу данных PostgreSQL с помощью python.

Это мое решение, есть ли лучшие способы сделать это?

import csv
import psycopg2
import os
from multiprocessing.pool import ThreadPool as Pool

conn = psycopg2.connect(
    host="localhost",
    database="database",
    user="user",
    password="password",
    port="5432"
)

cur = conn.cursor()


def searchFiles(directory='.', extension=''):
    filelist = []
    extension = extension.lower()
    for dirpath, dirnames, files in os.walk(directory):
        for name in files:
            if extension and name.lower().endswith(extension):
                filelist.append(os.path.join(dirpath, name))
            elif not extension:
                print(os.path.join(dirpath, name))
    return filelist


def importData(file):
    with open(file, 'r') as f:
        reader = csv.reader(f, delimiter=":")
        for row in reader:
            print(row)
            cur.execute("INSERT INTO database VALUES (%s, %s)", row)
    conn.commit()

fileList = searchFiles('.', '.txt')

threadPool = Pool(processes=8)

for file in fileList:
    threadPool.map(importData, (file,))

Спасибо за любые предложения!

...