Bagaimana cara mengimpor file * .sql yang ada di PostgreSQL 8.4?

105

Saya menggunakan PostgreSQL 8.4, dan saya memiliki beberapa file * .sql untuk diimpor ke database. Bagaimana saya bisa melakukannya?

Badr
sumber

Jawaban:

142

Dari baris perintah:

psql -f 1.sql
psql -f 2.sql

Dari psqlprompt:

\i 1.sql
\i 2.sql

Perhatikan bahwa Anda mungkin perlu mengimpor file dalam urutan tertentu (misalnya: definisi data sebelum manipulasi data). Jika Anda memiliki bashshell (GNU / Linux, Mac OS X, Cygwin) dan file dapat diimpor dalam urutan abjad , Anda dapat menggunakan perintah ini:

for f in *.sql ; do psql -f $f ; done

Berikut dokumentasi psqlaplikasinya (terima kasih, Frank): http://www.postgresql.org/docs/current/static/app-psql.html

Bolo
sumber
@moon Mungkin Anda tidak memiliki hak akses ke file SQL? Anda menggunakan sistem operasi apa?
Bolo
@moon Ini adalah kata sandi yang terkait dengan pengguna PostgreSQL Anda (pasangan pengguna-pass disimpan di PostgreSQL).
Bolo
8
@moon Saya menyarankan agar Anda membagi masalah Anda menjadi tiga tahap: 1) pastikan bahwa Anda dapat segera psqlmenjalankannya. 2) pastikan pengguna Anda memiliki hak tulis yang diperlukan, seperti: CREATE, INSERT, UPDATE, dll 3) mengimpor file SQL. Sejauh yang saya mengerti, Anda berada di tahap 1 sekarang.
Bolo
@Bolo: Apakah Anda akan memasukkan tiga tahap ke dalam jawaban?
H
@Bolo, Seperti yang Anda sebutkan, saya sekarang di langkah ketiga. tetapi bagaimana saya dapat mengimpor file .sql dari mesin lokal saya. Saya mencoba \ i [jalur lengkap dengan ekstensi] tetapi saya mendapatkan pesan kesalahan .sql tidak ada file atau direktori seperti itu. Bisakah Anda memberi contoh.
75

di baris perintah pertama-tama buka direktori tempat psql ada kemudian tulis perintah seperti ini:

psql [database name] [username]

lalu tekan enter psql meminta kata sandi berikan kata sandi pengguna:

lalu menulis

> \i [full path and file name with extension]

lalu tekan enter, penyisipan selesai.

Badr
sumber
Saya menggunakan ini juga. Dan itu berhasil. Tapi, saya mengubah pernyataan SQL yang disediakan. Sebelumnya * .sql yang ada tidak menggunakan karakter apapun; sebagai penghentian baris. Dan saya juga harus menghapus GO. Apakah menurut Anda skrip sql bukan skrip psql?
swdev
Saya mencoba menggunakan \ i [jalur lengkap dengan ekstensi] tetapi saya mendapatkan pesan kesalahan .sql tidak ada file atau direktori seperti itu. Bisakah Anda mengunggah sebuah contoh. Terima kasih.
Jika \ i mengatakan tidak ada file seperti itu maka tidak menemukan file pada posisi itu. Yang terbaik adalah memberikan URL absolut. Bagi saya di Windows, baris perintah ini berfungsi: \ i /tmp/robert/test.sql tentu saja Anda harus memiliki perintah SQL yang valid di file itu.
Shevy
36

Nah, cara terpendek yang saya ketahui, adalah sebagai berikut:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

database_name: Di database mana Anda harus memasukkan data file.

file_path: Jalur absolut ke file yang ingin Anda gunakan untuk mengimpor.

host_name: Nama host. Untuk tujuan pembangunan, sebagian besar localhost.

Saat memasukkan perintah ini di konsol, Anda akan diminta untuk memasukkan kata sandi Anda.

Arslan Ali
sumber
25

Hati-hati dengan "/" dan "\". Bahkan di Windows, perintahnya harus dalam bentuk:

\i c:/1.sql
sofiane
sumber
1

Selalu disukai menggunakan file layanan koneksi (lookup / google 'file layanan koneksi psql')

Kemudian cukup:

psql service={yourservicename} < {myfile.sql}

Di mana yourservicenamenama bagian dari file layanan.

Ted Rybicki
sumber