How can we help?
Оригинал статьи здесь. Содержимое файла sample.csv:
id,name,description,createdAt 1,Node.js,JavaScript runtime environment,2019-09-03 2,Vue.js,JavaScript Framework for building UI,2019-09-06 3,Angular.js,Platform for building mobile & desktop web app,2019-09-09
Создаем таблицу, для чего подключаемся к базе:
PS C:\node.js\csvToPostgres2> psql.exe -d postgres -U postgres Пароль пользователя postgres: psql (14.2) ПРЕДУПРЕЖДЕНИЕ: Кодовая страница консоли (866) отличается от основной страницы Windows (1251). 8-битовые (русские) символы могут отображаться некорректно. Подробнее об этом смотрите документацию psql, раздел "Notes for Windows users". Введите "help", чтобы получить справку. postgres=# CREATE TABLE category postgres(# id integer NOT NULL, postgres(# name VARCHAR(255) NOT NULL, postgres(# description VARCHAR(255), postgres(# created_at DATE); CREATE TABLE
Смотрим содержимое таблицы — \d category:

Импортируем модули fast-csv и pg:
npm install fast-csv pg
Ну и собственно сам код:
const fs = require("fs");
const fastcsv = require("fast-csv");
let stream = fs.createReadStream("sample.csv");
let csvData = [];
let csvStream = fastcsv
.parse()
.on("data", function(data) {
csvData.push(data);
})
.on("end", function() {
// remove the first line: header
csvData.shift();
// connect to the PostgreSQL database
// save csvData
});
stream.pipe(csvStream);
const Pool = require("pg").Pool;
// remove the first line: header
csvData.shift();
// create a new connection pool to the database
const pool = new Pool({
host: "localhost",
user: "postgres",
database: "postgres",
password: "postgres",
port: 5432
});
const query =
"INSERT INTO category (id, name, description, created_at) VALUES ($1, $2, $3, $4)";
pool.connect((err, client, done) => {
if (err) throw err;
try {
csvData.forEach(row => {
client.query(query, row, (err, res) => {
if (err) {
console.log(err.stack);
} else {
console.log("inserted " + res.rowCount + " row:", row);
}
});
});
} finally {
done();
}
});
Запускаем код видим как наполняется таблица:
PS C:\node.js\csvToPostgres2> node .\index.js inserted 1 row: [ '1', 'Node', "'JavaScript runtime environment'", '2019-09-03' ] inserted 1 row: [ '2', 'Vue', "'JavaScript Framework for building UI'", '2019-09-06' ] inserted 1 row: [ '3', 'Angular', "'Platform for building mobile & desktop web app'", '2019-09-09' ]
Смотрим содержимое таблицы SELECT * FROM category:

Очистить содержимое таблицы: DELETE FROM category;