データベース | データベースにCSVデータをインポートする(PostgreSQL、SQL Server、MySQL)

データベース | データベースにCSVデータをインポートする(PostgreSQL、SQL Server、MySQL)

みなさん、こんにちは。

今回は仕事でもよく利用する CSVデータの一括挿入を検証します。

テストデータ

以下のテストデータを利用します。

ChatGPTに作ってもらいました。

下図のように、社員番号、社員名が入っています。

インポート先のテーブル

インポート先のテーブルは以下のように定義します。

Create table employees(
    id varchar(5) NOT NULL PRIMARY KEY,
    name varchar(50)
)

PostgreSQLの場合

PostgreSQLの場合は、「COPY」を用います。

SQLサーバ内のtmpフォルダの直下に「employees.csv」を置いた場合、以下のように記載します。

COPY employees FROM '/tmp/employees.csv' WITH CSV;

A5SQL経由で確認し、確かに挿入されていることを確認しました。

MS SQL Serverの場合

SQL Serverの場合は BULK INSERT を用います。

SQLサーバ内のtmpフォルダの直下に「employee.csv」を置いた場合、以下のように記載します。

BULK INSERT employees FROM '/tmp/employees.csv' WITH(FORMAT = 'CSV');

インポートできていることを確認しました。

MySQLの場合

MySQLの場合は LOAD DATA INFILE を用います。

MySQLサーバ内のtmpフォルダの直下に「employee.csv」を置いた場合、以下のように記載します。

LOAD DATA INFILE '/tmp/employees.csv' INTO TABLE employees FIELDS TERMINATED BY ',';

CSV取り込み時のdocker runのコマンド

dockerでMySQLの環境を作っているのですが、「–secure-file-priv」オプションを指定しないと、「MySQL server is running with the –secure-file-priv option so it cannot execute this statement」と怒られてしまいました。

以下のようにdocker runします。

docker run --name miseruIT_mySQL -e MYSQL_ROOT_PASSWORD=passw0rd -p 3306:3306 -it mysql --secure-file-priv=/tmp

【おまけ】A5SQL経由でインポートする

PostgreSQLとMSSQLでCSVインポートの方法が異なることが分かりました。

A5SQLを使えば、どちらのDBでもGUI経由でインポートできるような機能があるとのことで、使ってみます。

1)データベース>連続インポート

インポートしたいデータベースをクリックした状態で、データベース>連続インポートを選択します。

2)連続インポートの設定を行う

対象のテーブルとインポートフォルダを指定します。

ファイル名に「テーブル名.csv」とすれば、そちらを指定することができます。

以下のようなポップアップが表示されれば成功です。

このように、アプリケーション側でDBの製品仕様の差を埋めてくれるのは非常に助かりますね!

今回は以上です!

ではまた!

本日のAmazonおすすめ_Top10

2024-10-14 10:54:09時点