Penggunaan COPY DARI STDIN dalam postgres

14

Saya baru saja mulai menggunakan Postgres dan saya mencoba membuat sampel db untuk memahami fungsinya, melihat-lihat, saya menemukan beberapa skrip di pgfoundry.org. Saya mengerti perintah, karena saya sebelumnya menggunakan Oracle dan MS-SQL, tetapi semua skrip yang saya jalankan mengembalikan kesalahan ketika mencapai instruksi "COPY FROM". Lebih tepatnya, kesalahan dilemparkan ke elemen pertama yang harus dimasukkan dalam tabel yang diberikan.

Saya sudah mencoba menjalankan skrip baik sebagai kueri maupun sebagai skrip pg, tetapi dalam kedua cara saya mendapatkan kesalahan di baris pertama setelah COPY FROM.

Saya menggunakan pgAdminIII dan saya menggunakan StackBuilder untuk menginstal PostgreSQL 9.2.4.1 sebagai Driver DB. Bolehkah saya kehilangan beberapa konfigurasi dasar yang mencegah saya menjalankan perintah ini, atau saya hanya tidak mengerti cara kerjanya?

EDIT:
Kesalahannya adalah:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

dimana teksnya:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Eugenio Laghi
sumber
1
Selamat datang di dba.SE. Anda harus menyertakan pesan kesalahan (kata demi kata) dengan pertanyaan seperti itu. Jika lokal Anda bukan non-Inggris, Anda dapat mengatur ulang di sesi Anda sebelum Anda menjalankan skrip untuk mendapatkan pesan kesalahan bahasa Inggris standar: SET lc_messages = CJalankan saja di jendela editor SQL Anda, yang "berisi" satu sesi.
Erwin Brandstetter
Terima kasih, saya mencoba mencari cara untuk mengubah lokal saya, saya akan memasukkan pesan kesalahan segera setelah saya mengetahui cara melakukannya.
Eugenio Laghi
1
Oh, aku lupa tanda kutip tunggal: SET lc_messages = 'C'.
Erwin Brandstetter

Jawaban:

10

pgScript adalah ekstensi skrip lokal pgAdmin, yang kemungkinan besar tidak Anda inginkan di sini.

pgAdmin adalah GUI, bukan aplikasi konsol - tidak ada stdinyang bisa Anda gunakan dengan mudah. Jika Anda perlu stdinmelakukan streaming konten Anda, gunakan psql, yang merupakan aplikasi konsol - dengan \copymeta-command psql .

Jika Anda memiliki file (yang jelas Anda lakukan), cukup gunakan SQL COPYdari pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

File harus dapat dibaca oleh postgrespengguna sistem.

Info lebih lanjut dalam permintaan terkait erat ini ke daftar dukungan pgAdmin .

Erwin Brandstetter
sumber
ok, maksud Anda saya harus menjalankan skrip dengan garis seperti psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql:? Juga, saya hanya mencoba semuanya secara lokal, saya baru saja menginstal pgAdmin di laptop saya.
Eugenio Laghi
1
@EugenioLaghi: Tidak juga. psql -fakan menjalankan file skrip SQL. Anda tampaknya berurusan dengan file data . Saya memperbarui jawaban saya.
Erwin Brandstetter
TERIMA KASIH! Pada awalnya saya mencoba untuk mengeksekusi skrip, tetapi sekarang setidaknya saya menemukan cara untuk menyalin data dari file! Kemarin malam saya terlalu lelah untuk mengerti .. :)
Eugenio Laghi
Bagaimana Anda memastikan bahwa pengguna postgres dapat membaca file. Saya membuat itu terjadi untuk file txt, bahkan untuk desktop saya (di mana file itu berada), tetapi izin masih ditolak.
@ Geo: Silakan mulai pertanyaan baru termasuk versi Postgres, OS, di mana file itu berada, perintah kata demi kata yang Anda gunakan dan lebih banyak lagi jika relevan ...
Erwin Brandstetter