• ベストアンサー

csvデータをPostgreSQLにインポート

RedHat8.0にpostgresql-7.2.3.tar.gzをインストールしています。database_6に接続し、 database_6=# COPY tablename FROM '/var/test/testdata.csv' WITH CSV; を実行すると(tablenameとtestdataとは同一名にしてあります)、 ERROR: parser: parse error at or near "csv" と表示されてしまいます。どこが悪いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

7.x の PostgreSQL では COPY コマンドが WITH CSV をサポートしていないようです。 http://www.postgresql.org/docs/7.2/static/sql-copy.html http://www.postgresql.org/docs/7.4/static/sql-copy.html には WITH CSV がありません。 http://www.postgresql.org/docs/8.0/static/sql-copy.html http://www.postgresql.org/docs/8.4/static/sql-copy.html には WITH CSV があります。 できるだけ安定した新しいバージョンの postgresql-8.x を利用するのが望ましいのですが、 何か理由があって 7.2.3 を使うのであれば、COPY コマンドではない方法を探す必要があります。

Feruza
質問者

お礼

ご回答ありがとうございます。 最初、書籍の内容に基づいて(Yumで)インストールしようとしたところ、いつの間にか(ダブルクリックで)pgdg-redhat-8.0-5.noarch.rpmがインストールされてしまい、エンコーディングがASCIIで初期化されてしまっていましたため、アンインストールしまいた。しかしながら、その後、既にインストールされているというエラーメッセージが出て、再インストールができなくなりました。そこで、別の書籍 書籍の内容に基づいて、postgresql-7.2.3.tar.gz(付録)をインストールしたという経緯があります。こちらはUTF8に対応していないようで、EUC_JPになっていますが、EUC_JPのファイルがなぜか文字化けもします。RedHat8.0からCentOS5へ移行をする際(検討中)、あるいは、どこかで、postgresql-8.x.tar.gzをダウンロードできれば、postgresql-8.xを試してみます。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

testdata.csvをインポートしたいならその後の「/」は不要でしょう。

Feruza
質問者

お礼

ご回答ありがとうございます。 testdata.csvの後には「/」は付けていません。 参考にしていた書籍にデータベースにテーブルを作成することが記載されていませんでした。しかしながら、テーブルを作成しても同じ結果です。インポートしようとしているファイルには、ラベルを付けていません(Windows版でインポートした際、不要であったため)。スキーマや主キーを作成していないと、問題はあるでしょうか?

Feruza
質問者

補足

postgresql-7.2.3.tar.gzをインストールする際、UTF8を設定できず、EUC_JPになってしまいました。TeraPadでは文字コード指定再読込がEUC(E)しかないため、不安でしたが、RedHat8.0のTerminalで開いてみると、日本語表示に関しては問題なさそうです。ただし、アクセント文字は文字化けしてしまっています。

関連するQ&A

  • Encoding変更

    RedHat8.0であるため、postgresql-7.2.3.tar.gzをインストール(初期化を含む)していましたが、検証をしているうちに、下記コマンドを実行できないこと COPY tablename FROM '/var/test/testdata.csv' WITH CSV; また、encodingにUTF8を指定できことが分かりました。そこで、postgresql-7.2.3.tar.gzをアンインストールし、postgresql-8.0.26.tar.gzをインストール(初期化を含む)しましたが、Encodingを確認したところ、EUC_JPのままになっていました。アンインストールが上手くできなかったためと考えられますが、どのようにすれば、UTF8に変更できるでしょうか?

  • csvデータをインポートできない

    書籍にLinux(RedHat8.0)、PostgreSQLのユーザ名とデータベース名とを同一にするように記載されていました。このため、"database_6"というもの作成しました。ところが、テーブル作成、テーブル確認には、データベース接続後、所定のコマンドを実行することで問題はありませんでしたが、インポート時には、 ERROR: could not open file "/home/database_6/database_euc_4.csv" for reading: 許可がありませえん とエラーメッセージが表示されます。そこで、アクセス権限を調べると、 -r-xr-xr-x 1 database_6 database_6 113166 6月 5 19:37 database_euc_4.csv これは、Linuxの"database_6"であって、PostgreSQLの"database_6"ではないと考えられます。どのようにすれば、アクセス権限を変更できるでしょうか?ここでは、同一名称にしたことが、仇になっているようです。こうならないようにするために、同一名称にするのかと思っていましたが…。 ちなみに、database_6のOwnerは"postgres"になっています。"postgres"にアクセス権限を与えるのも1つの方法かと思いますが、インポートを実行しようとすると、 -bash: COPY: command not found とエラーメッセージが表示され、パスが通っていないようです。これは、~/.bash_profileが上手く読み込まれていないということでしょうか?

  • csvデータをPostgreSQLにコピー

    # rpm -qa | grep postgresql を実行してみると、 postgresql-python-7.2.2-1 postgresql-odbc-7.2.2-1 postgresql-7.2.2-1 postgresql-perl-7.2.2-1 postgresql-server-7.2.2-1 postgresql-devel-7.2.2-1 postgresql-contrib-7.2.2-1 postgresql-libs-7.2.2-1 postgresql-jdbc-7.2.2-1 postgresql-tcl-7.2.2-1 が表示されたため、 # postgres start を実行すると、 "root" execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged user id to prevent more information on how to properly start the server. と表示されます。そこで、本サイトのQ&Aを参考にして、 # /etc/init.d/postgresql start を実行したところ、起動しました。Windows版では、pgAdminIIIのクエリーツールで以下のようにすれば、csvデータ(UTF8)をPostgreSQLの所定のテーブルにインポートできます。 COPY tablename FROM E'C:\\test\\testdata.csv' WITH CSV; Linux版ではどのようにするのでしょうか?

  • 大容量のCSVファイルをインポートするには。

    お世話になります。 Windows版のPostgreSQLをインストールしてCSVファイルを読み込ませようとしていますが途中でエラーが発生してしまい困っています。 取り込んでいるCSVファイルの件数は約65万件です。 その際に実行している下記のコマンドは以下の通りです。 SET client_encoding TO 'SJIS'; COPY T_SAMPLE FROM 'C:\test.csv' WITH CSV; また途中で発生したエラーの内容は以下の通りです。 ERROR: メモリ不足です DETAIL: 1073708532バイトを持つ文字列バッファを65534バイト多く、大きくすることができません。 CONTEXT: T_SAMPLEのCOPY。行番号 231916 どのようにしたら大容量のCSVファイルをデータベースにインポートする事ができるのでしょうか。 大変、申し訳ありませんがどうか私を助けて下さい。 些細な事でも何でも構いませんのでアドバイスいただけませんでしょうか。 私の環境のOSは「Windows Vista Ultimate」でPostgreSQLは「PostgreSQL 9.5.4」です。 何卒、宜しくお願いします。では、失礼します。

  • データ型textのcsvインポート

    環境 Apache2 PostgreSQL8 PHP5 EUC-JP PostgreSQLのデータ型textにて入力したデータをcsvダウンロードし、 再度csvをアップロードし取り込むプログラムを作成しております。 データ型textなので改行コードや長文のデータがあります。 csvファイルにてダウンロードする際、 \nを↑、\rをブランクに変換してcsvファイルを作成し、 csvファイルをアップロードする際は、 mb_convert_encodingにてcsvファイルのsjisをeuc-jpに変換をしております。 ほとんどのデータが問題なくアップロードできるのですが、 syntax error at or near "," というエラーが出る場合があります。 これはどのような場合に出るのでしょうか? 抽象的な質問かもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • テーブルにcsvファイルをインポートできない

    かなり困っています。REDHAT LINUXでpostgresのテーブルにpsqlからのCOPYコマンドでcsvファイルのデータをインポートしようとしているのですが、文字数オーバーのエラーがでてしまいます。テーブルは2列で1つ目の列はCHAR(10)で2列目はINT4型です。csvファイルの内容はとりあえず1行だけ入れていて「"1234567890","1234"」を入れています。コマンドはpsqlで「COPY テーブル FROM 'ファイルのパス' USING DELIMITER ","」で行いました。エラーはおそらくインポートしたデータがおかしくなって変な桁数になっているのですが、どういうふうにおかしくなっているのかがよくわからないので対策できません。

  • PostgreSql & Perl でのインサート処理失敗について

    前回はありがとうございました。 今回はpostgresqlをPerl(DBD::pg)でアクセスし、インサート しようとした場合なのですが、 DBD::Pg::st execute failed: ERROR: parser: parse error at or near "re" at character 3576 とメッセージが表示され処理がうまくいきません。 過去に同様のエラーで落ちたことがあって、何パターンかは このメッセージが表示される原因は知っているつもりなんですが、 今回は過去の経験に当てはまらないように見えます。 ヒントになることなど、なんでも構いませんのでお助け願います。

  • PostgreSQL MySQL CSV入出力

    テーブルのデータを移植したいと思っています PostgreSQL8.4から出力したCSVをMySQL5.5で取り込みたいのですが、COPYコマンドを使用すると以下のようなエラーが出ます ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns PostgreSQLはtext[]型で"{A_1,A_2}"といったデータを出力します MySQLはPostgreSQLの配列に相当する型がないようなのでBlob型で格納しようと思っています おそらくデータ内のカンマが原因なのはわかっているのですが、上手くエクスポート・インポートする方法はありませんでしょうか?

    • ベストアンサー
    • MySQL
  • postgresql-CSV生成時の文字化け

    お世話になります。 実行環境:  OS:Win8.1 64bit  PostgreSQLのバージョン:9.5.3-1  client_encoding:SJIS  データベースエンコーディング:EUC_JP C C 以上のような環境でローカルフォルダにCSVを出力することを 考えていますが、ファイル名に日本語が含まれるCSVを出力 すると文字化けします。 正常なケース:  COPY (select * from db) TO 'D:\pos\hoge.csv' (FORMAT csv); 異常なケース:  COPY (select * from db) TO 'D:\pos\ほげほげ.csv' (FORMAT csv);  →ファイル名が文字化け。   ただし、レコードの中身は文字化けせず出力できている。 文字化けせずに日本語ファイルを出力できるのが理想です。 対処法はありますでしょうか? --そもそもCOPYコマンドのファイル名のエンコードはどこで設定するのでしょうか?

  • PostgreSQLのnull値について

    PostgreSQL7.2.3 で利用しています。 insert文を発行するときは null値は values(null); と実行します。 これは問題ないのですが COPY toコマンドを発行し、(カンマ区切り)csvに落とすと \N で落ちてきます。何か設定が悪いのでしょうか? 同じく、カンマ区切りのファイル 123,,,,5,66 とかを COPY fromコマンドでの受入を実行することもできません。 123,\N,\N,\N,5,66 だったら成功するようです。 こういうものなのでしょうか?