CodeGym /Kurslar /SQL SELF /İstifadə \COPY lokal kompüterd...

İstifadə \COPY lokal kompüterdən data yükləmək üçün

SQL SELF
Səviyyə , Dərs
Mövcuddur

\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\COPY arasındakı fərq

Bir baxışda COPY\COPY komandaları oxşardır, amma işləmə prinsipi fərqlidir:

  • COPY server 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.

  • \COPY isə client tərəfində işləyir, yəni fayl client proqramı üçün əlçatan olmalıdır, məsələn, psql. \COPY ilə ö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ə COPY istifadə 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ə.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION