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.WITHopsiyaları 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 CSVPostgreSQL-ə faylın CSV formatında olduğunu bildirir.HEADER TRUEfaylı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 | 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:
- Fayl PostgreSQL istifadəçisi üçün oxuna biləndir. Adətən bu istifadəçi
postgresolur. - 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.
COPYbu 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!
GO TO FULL VERSION