\COPY komandası PostgreSQL-ə datanı birbaşa öz lokal kompüterindən yükləmək üçündür. COPY komandası PostgreSQL serverində olan fayllarla işləyir, amma \COPY isə sənin öz kompüterində olan fayllarla işləyir, məsələn, noutbukda və ya iş kompüterində.
\COPY komandası o vaxt istifadə olunur ki, sən öz lokal kompüterindəki fayllarla işləyirsən, məsələn, noutbukda. COPY serverdəki faylları oxuyur, \COPY isə sənin əlində olan faylları yükləməyə imkan verir.
Bu, əsasən layihəni öz kompüterində hazırlayanda və ya test edəndə, yaxud PostgreSQL serverinin fayl sisteminə çıxışın olmayanda çox rahatdır. Belə yanaşma xüsusilə developer və analitiklər arasında populyardır, çünki CSV faylını tez yoxlamaq üçün əlavə əziyyət çəkməyə ehtiyac yoxdur.
COPY və \COPY arasındakı fərq
Bir baxışda COPY və \COPY komandaları oxşardır, amma işləmə prinsipi fərqlidir:
COPYserver tərəfində işləyir və fayl PostgreSQL üçün əlçatan olan qovluqda olmalıdır. PostgreSQL-in həmin faylı oxumaq üçün icazəsi olmalıdır.\COPYisə client tərəfində işləyir, yəni fayl client proqramı üçün əlçatan olmalıdır, məsələn,psql.\COPYilə öz kompüterində olan fayllardan data yükləyə bilərsən, hətta serverə çıxışın olmasa belə.
\COPY istifadə qaydaları
Komandanın sintaksisi
\COPY cədvəl FROM 'file_path' [WITH] (opsiyalar)
Burada:
cədvəl: data yüklənəcək cədvəlin adı.file_path: lokal kompüterində faylın yolu.opsiyalar: funksiyanın davranışını fərdiləşdirməyə imkan verən əlavə parametrlər.
Nümunə:
\COPY students FROM 'C:/data/students.csv' DELIMITER ',' CSV HEADER;
students: data yüklənəcək cədvəlin adı.'C:/data/students.csv': lokal kompüterində faylın yolu.DELIMITER ',': fayldakı datanın ayırıcı simvolunu göstərir (bu nümunədə vergül).CSV HEADER: faylın ilk sətrinin sütun başlıqları olduğunu göstərir.
Nümunə:
Tutaq ki, səndə students.csv adlı bir fayl var, orada tələbələr haqqında məlumat var və bu fayl lokal qovluğundadır, məsələn, C:/data/students.csv. Məzmunu belədir:
id,name,age,major
1,John Doe,20,Computer Science
2,Jane Smith,22,Mathematics
3,Emily White,21,Physics
Bu datanı students cədvəlinə yükləmək istəyirik. Əvvəlcə PostgreSQL-də belə bir cədvəl yaratmışam:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL,
major TEXT
);
İndi \COPY komandasını istifadə edirik:
\COPY students FROM 'C:/data/students.csv' DELIMITER ',' CSV HEADER;
Bu komandanı işlətdikdən sonra students cədvəlində students.csv faylından üç qeyd olacaq. Bunu belə yoxlaya bilərsən:
SELECT * FROM students;
Gözlənilən nəticə:
| id | name | age | major |
|---|---|---|---|
| 1 | John Doe | 20 | Computer Science |
| 2 | Jane Smith | 22 | Mathematics |
| 3 | Emily White | 21 | Physics |
\COPY komandasının parametrləri
\COPY istifadə edəndə, xüsusilə CSV formatında, əsas parametrləri bilmək vacibdir ki, data formatına nəzarət edə və işləməni asanlaşdırasan. Ən populyarları aşağıdadır.
FORMAT parametri
Data formatını təyin edir. Ən çox istifadə olunan dəyərlər: text, csv.
Nümunə:
\COPY users FROM 'users.csv' WITH (FORMAT csv)
Niyə lazımdır: bu parametr olmasa, PostgreSQL sənin text formatında, tabulyasiya ilə işlədiyini düşünəcək. csv isə daha universal və oxunaqlıdır.
HEADER parametri
CSV faylının ilk sətrinin sütun başlıqları olduğunu göstərir, data yox.
Nümunə:
\COPY users FROM 'users.csv' WITH (FORMAT csv, HEADER)
Niyə lazımdır: başlığı importdan çıxarmağa imkan verir — xüsusilə Excel və ya başqa sistemlərdən export edəndə faydalıdır.
DELIMITER parametri
Sahələrin ayırıcı simvolunu təyin edir. CSV üçün default vergül, TEXT üçün isə tabulyasiyadır.
Nümunə:
\COPY products FROM 'products.csv' WITH (FORMAT csv, DELIMITER ';')
Niyə lazımdır: qeyri-standart CSV formatlarına uyğunlaşdırmaq üçün, məsələn, nöqtəli vergül (Avropada tez-tez istifadə olunur).
ENCODING parametri
Faylın kodirovkasını göstərir.
Nümunə:
\COPY clients FROM 'clients.csv' WITH (FORMAT csv, HEADER, ENCODING 'WIN1251')
Niyə lazımdır: Windows və ya başqa sistemlərin kodirovkası ilə olan faylları problemsiz yükləməyə imkan verir, əlavə konvertasiya olmadan.
NULL parametri
Faylda hansı string dəyərin NULL kimi qəbul olunacağını göstərir.
Nümunə:
\COPY orders FROM 'orders.csv' WITH (FORMAT csv, NULL 'NULL')
Niyə lazımdır: fayllarda boş dəyərlər 'NULL' kimi yazılıbsa, bu parametr onları düzgün NULL kimi qəbul etməyə kömək edir.
\COPY istifadə zamanı məhdudiyyətlər və xüsusiyyətlər
1. PostgreSQL client tələbləri
psql — bu PostgreSQL clientidir və \COPY komandasını dəstəkləyir. Əmin ol ki, məhz bununla işləyirsən. Başqa clientlər, məsələn, pgAdmin, \COPY dəstəkləməyə bilər.
2. Faylın kodirovkası
Yüklədiyin faylın kodirovkasına fikir ver. PostgreSQL gözləyir ki, fayl UTF-8-də olsun. Əgər başqa kodirovkadadırsa (məsələn, Windows-1251), səhvlər çıxa bilər. Faylın kodirovkasını iconv və ya mətn redaktorları (məsələn, VS Code) ilə dəyişə bilərsən.
3. Fayl yolunun lokalizasiyası
Windows-da fayl yolunda tərs slash (\) ola bilər. Onları düz slash (/) ilə əvəz et. Məsələn, C:\data\students.csv əvəzinə C:/data/students.csv yaz.
Tipik səhvlər və həlləri
1. Fayla çıxış səhvi.
Əgər belə bir şey görürsənsə:
could not open file "C:/data/students.csv" for reading: No such file or directory
Əmin ol ki:
- Fayl göstərilən yerdə həqiqətən var.
- Düzgün tam yolu göstərmisən.
- Fayla çıxış icazən var.
2. Data strukturu uyğunsuzluğu. Əgər yüklənən faylın strukturu cədvəldən fərqlidirsə, səhv çıxacaq. Məsələn, faylda əlavə sütunlar və ya yanlış data tipləri varsa, error mesajı alacaqsan. Sütun başlıqlarını və tiplərini əvvəlcədən yoxla.
3. Kodirovka problemləri. Fayl UTF-8-də deyilsə, mətn əvəzinə "qarışıq" simvollar görəcəksən. Həll — faylı əvvəlcə UTF-8-ə çevir, sonra yüklə.
\COPY istifadə üstünlükləri
1. Sadəlik. Bir komanda ilə fayldan data yükləyə bilərsən. Faylları serverə ötürməyə ehtiyac yoxdur.
2. Universal. psql bütün əsas əməliyyat sistemlərində işləyir, yəni \COPY demək olar ki, hər yerdə istifadə oluna bilər.
3. Çıxış icazəsi problemi yoxdur. Komanda client tərəfində işlədiyi üçün server fayllarına çıxış icazəsi barədə düşünməyə ehtiyac yoxdur.
Məhdudiyyətlər və məsləhətlər
Rahatlığına baxmayaraq, \COPY komandasının bəzi məhdudiyyətləri var:
- Çox böyük fayllar üçün uyğun deyil, çünki data client və server arasında şəbəkə ilə ötürülür. Belə hallarda serverdə
COPYistifadə etmək daha effektivdir. - Fayl tam yükləməyə hazır olmalıdır: səhvlər düzəldilib, artıq sətirlər silinib və faylın strukturu cədvəllə eynidir.
Böyük layihələrdə əvvəlcə kiçik data ilə test et, sonra tam faylı yüklə.
GO TO FULL VERSION