CodeGym /Kurslar /SQL SELF /Serverdən məlumatların yüklənməsi üçün COPY...

Serverdən məlumatların yüklənməsi üçün COPY istifadəsi

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

Məlumatların artıq serverdədirsə, onları PostgreSQL cədvəllərinə yükləmək üçün COPY komandasından istifadə edə bilərsən. Bu xüsusilə böyük həcmdə məlumatlarla işləyirsənsə və ya PostgreSQL serverin ayrıca bir maşında yerləşirsə, çox rahatdır.

Server tərəfində işləyən COPY komandası real layihələrdə xüsusilə əlverişlidir. Birincisi, bu, xeyli sürətlidir, çünki fayllar artıq serverdədir və şəbəkə ilə ötürülməyə ehtiyac yoxdur. Bu həm də prosesi daha təhlükəsiz edir: məlumatları lokal kompüterdən kopyalamağa ehtiyac qalmır və sızma riski azalır. Bundan əlavə, yükləməni rahatlıqla avtomatlaşdırılmış server skriptlərinə və ya background servislərə əlavə edə bilərsən – məsələn, analitik cədvəlləri mütəmadi yeniləyərkən.

COPY komandasının sintaksisi

COPY komandası sadədir, amma nəzərə alınmalı bir neçə əsas məqam var:

COPY table_name
FROM '/path/to/file.csv'
WITH (FORMAT CSV, HEADER TRUE);
  • table_name — məlumatları yükləmək istədiyin cədvəlin adı.
  • /path/to/file.csv — serverdə faylın tam yolu.
  • WITH opsiyaları ilə faylın formatını, başlıqların olub-olmadığını, ayırıcıları və s. göstərə bilərsən.

COPY komandasının istifadəsinə nümunə

Gəlin kiçik bir nümunəyə baxaq. Tutaq ki, tələbələr haqqında məlumat olan CSV faylını PostgreSQL bazasına yükləməlisən. Fayl serverdə /var/lib/postgresql/data/students.csv yolunda yerləşir.

Addım 1. Məlumat üçün cədvəl

Əvvəlcə bazada məlumatları yükləyə biləcəyimiz cədvəlin olduğuna əmin olaq:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    registration_date DATE
);

Bu cədvəl tələbələr haqqında məlumatları saxlayacaq: ad, email və qeydiyyat tarixi.

Addım 2. CSV faylı

/var/lib/postgresql/data/students.csv faylı təxminən belə görünə bilər:

id,name,email,registration_date
1,Alex Lin,alex.lin@example.com,2023-09-01
2,Maria Chi,maria.chi@example.com,2023-09-02
3,Peter Ming,peter.ming@example.com,2023-09-02

Addım 3. COPY komandası

İndi fayldan cədvələ məlumatları yükləmək üçün COPY istifadə edə bilərik:

COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, HEADER TRUE);

Burada:

  • FORMAT CSV PostgreSQL-ə faylın CSV formatında olduğunu bildirir.
  • HEADER TRUE faylın ilk sətrinin sütun başlıqları olduğunu göstərir.

Komandanı işlətdikdən sonra fayldakı məlumatlar students cədvəlinə dolacaq.

Nəticənin yoxlanılması

Məlumatları yüklədikdən sonra hər şeyin uğurla keçdiyinə əmin ol:

SELECT * FROM students;

Cədvəldə fayldan yüklənmiş sətrləri görəcəksən:

id name email registration_date
1 Alex Lin alex.lin@example.com 2023-09-01
2 Maria Chi maria.chi@example.com 2023-09-02
3 Peter Ming peter.ming@example.com 2023-09-02

İcazələrin qurulması

PostgreSQL fayldan istifadə etmək üçün COPY komandasına icazə olmalıdır. Əgər icazələr düzgün qurulmayıbsa, səhvlərlə qarşılaşacaqsan. Məsələn:

ERROR:  could not open file "/var/lib/postgresql/data/students.csv" for reading: Permission denied

Belə problemlərin qarşısını almaq üçün bunlara diqqət et:

  1. Fayl PostgreSQL istifadəçisi üçün oxuna biləndir. Adətən bu istifadəçi postgres olur.
  2. Faylın və yerləşdiyi qovluğun icazələrini yoxla:
ls -l /var/lib/postgresql/data/students.csv

Əgər icazələr kifayət deyilsə, onları belə dəyişə bilərsən:

chmod 644 /var/lib/postgresql/data/students.csv
chown postgres:postgres /var/lib/postgresql/data/students.csv

Burada söhbət Linux-dan gedir. Windows-da icazələrin qurulması adətən Windows administratoru tərəfindən edilir və bizim kursun mövzusuna daxil deyil.

COPY komandasının məhdudiyyətləri

COPY ilə işləyərkən nəzərə alınmalı bir neçə xüsusiyyət var:

Faylın yolu: mütləq yolu göstər, çünki PostgreSQL nisbətən yolları tanımaya bilər.

Faylın kodlaşdırılması: əgər CSV faylın kodlaşdırması bazanın kodlaşdırmasından fərqlidirsə (məsələn, Windows-1251 əvəzinə UTF-8), lazım olan kodlaşdırmanı ayrıca göstər:

COPY students
FROM '/var/lib/postgresql/data/students.csv'
WITH (FORMAT CSV, ENCODING 'WIN1251', HEADER TRUE);

Fayl strukturunda səhvlər: əgər faylın strukturu cədvəllə uyğun gəlmirsə və ya məlumatlar səhvdirsə (məsələn, mətn rəqəm sahəsinə yüklənirsə), yükləmə səhvlə bitəcək. Yükləməzdən əvvəl məlumatları yoxla!

Praktik tətbiq

Serverdən məlumat yükləmək üçün COPY istifadəsinin bir çox tətbiqi var:

  • Məlumat miqrasiyası: böyük həcmdə məlumatları serverlər və ya bazalar arasında köçürə bilərsən.
  • Xarici sistemlərlə inteqrasiya: bir çox sistemlər məlumatı CSV fayllara çıxarır. COPY bu məlumatları PostgreSQL-ə tez yükləməyə imkan verir.
  • Analitik hesabatların hazırlanması: serverdən avtomatik məlumat yükləmək böyük həcmdə informasiyanın analizini sürətləndirir.

Tipik səhvlər və onların həlli

COPY ilə işləyərkən bir sıra səhvlərlə qarşılaşa bilərsən:

Problem: Fayl əlçatmazdır

Səhv mesajı: could not open file for reading: Permission denied.

Həll: faylın PostgreSQL istifadəçisi (postgres) üçün əlçatan olduğuna və icazələrin düzgün olduğuna əmin ol.

Problem: Faylın formatı səhvdir

Səhv mesajı: malformed CSV line.

Həll: faylda boş sətrlər, məlumat səhvləri və ya gözlənilməz simvollar olub-olmadığını yoxla. Ayırıcının düzgün göstərildiyinə əmin ol.

Problem: Məlumat strukturunun uyğunsuzluğu

Səhv mesajı: ERROR: invalid input syntax for type integer.

Həll: cədvəldəki sütunların fayldakı məlumat strukturu ilə uyğun olduğuna bax. Məsələn, rəqəm məlumatları rəqəm sütunlarına, tarixlər isə DATE tipli sütunlara yüklənməlidir.

İndi serverdən məlumat yükləmək üçün COPY istifadə etməyə tam hazırsan. Bu bacarıqları layihələrində istifadə et və verilənlər bazası ilə işini daha səmərəli et!

1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
CSV-dən məlumatların əlavə olunması
CSV-dən məlumatların əlavə olunması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION