PostgreSQL 的 COPY 命令

PostgreSQL 的 COPY 命令

PostgreSQL 的 COPY 命令是高效數據導入導出的核心工具,性能遠超常規 INSERT 語句。以下是 COPY 命令的深度解析:

一 COPY 命令基礎

1.1 基本語法對比

命令類型語法示例執行位置文件訪問權限
服務器端COPYCOPY table FROM '/path/file.csv';數據庫服務器需要postgres系統用戶權限
客戶端COPY\copy table FROM 'file.csv';客戶端機器使用客戶端用戶權限

1.2 核心功能矩陣

功能COPY FROMCOPY TO
數據加載速度每秒萬行級每秒萬行級
事務處理單事務操作單事務操作
二進制支持
錯誤處理可跳過錯誤行-

二 高級使用技巧

2.1 復雜數據轉換

-- 導入時轉換數據類型
COPY users(id, name, reg_date) 
FROM '/data/users.csv' 
WITH (FORMAT csv, HEADER,DELIMITER '|',NULL 'NULL',FORCE_NOT_NULL (id, name),ENCODING 'UTF8');

2.2 條件導出

-- 導出查詢結果
COPY (SELECT * FROM orders WHERE order_date > '2025-01-01') 
TO '/data/recent_orders.csv' 
WITH (FORMAT csv, HEADER);

三 性能優化方案

3.1 批量加載最佳實踐

# 使用并行加載(拆分文件后)
for i in {1..4}; dopsql -c "COPY large_table FROM '/data/part$i.csv' WITH (FORMAT csv)" &
done
wait

3.2 關鍵性能參數

參數推薦值影響
maintenance_work_mem1GB+提高導入排序效率
max_wal_size4GB+減少WAL檢查點
synchronous_commitoff禁用同步提交加速導入

四 異常處理機制

4.1 錯誤日志記錄

-- 創建錯誤日志表
CREATE TABLE import_errors (line_num integer,error_msg text,raw_data text
);-- 帶錯誤記錄的導入
BEGIN;
CREATE TEMP TABLE temp_import (LIKE target_table);
COPY temp_import FROM '/data/source.csv' WITH (FORMAT csv, HEADER);
INSERT INTO target_tableSELECT * FROM temp_importON CONFLICT DO NOTHING;
INSERT INTO import_errorsSELECT pg_copy_log();
COMMIT;

4.2 二進制格式處理

# 導出二進制數據
pg_dump -t table_name -Fc -f output.dump dbname# 二進制文件轉換
pg_restore -l output.dump > output.list

五 監控與維護

5.1 性能監控查詢

-- 查看COPY操作歷史
SELECT query, duration 
FROM pg_stat_statements 
WHERE query LIKE 'COPY%' 
ORDER BY duration DESC;-- 檢查導入進度(PostgreSQL 14+)
SELECT pid, query, pg_stat_get_progress_info('COPY') 
FROM pg_stat_activity 
WHERE backend_type = 'client backend';

5.2 維護建議

  1. 定期清理臨時文件:COPY操作可能產生大量WAL日志
  2. 版本升級驗證:不同PostgreSQL版本COPY行為可能有差異
  3. 網絡優化:跨數據中心傳輸時考慮壓縮選項

COPY命令是PostgreSQL數據遷移的核心工具,掌握其高級用法可以顯著提升ETL效率。對于TB級數據遷移,建議:

  • 使用二進制格式減少I/O
  • 結合表分區并行加載
  • 在維護窗口禁用WAL歸檔
  • 考慮使用pg_bulkload擴展處理超大規模數據

更詳細內容請查看官方文檔:

https://www.postgresql.org/docs/17/sql-copy.html

謹記:心存敬畏,行有所止。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75531.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75531.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sa-Token 自定義插件 —— SPI 機制講解(一)

前言 博主在使用 Sa-Token 框架的過程中,越用越感嘆框架設計的精妙。于是,最近在學習如何給 Sa-Token 貢獻自定義框架。為 Sa-Token 的開源盡一份微不足道的力量。我將分三篇文章從 0 到 1 講解如何為 Sa-Token 自定義一個插件,這一集將是前沿…

論文精度:基于LVNet的高效混合架構:多幀紅外小目標檢測新突破

論文地址:https://arxiv.org/pdf/2503.02220 目錄 一、論文背景與結構 1.1 研究背景 1.2 論文結構 二、核心創新點解讀 2.1 三大創新突破 2.2 創新結構原理 2.2.1 多尺度CNN前端 2.2.2 視頻Transformer設計 三、代碼復現指南 3.1 環境配置 3.2 數據集準備 3.3 訓…

解決 Ubuntu 上 Docker 安裝與網絡問題:從禁用 IPv6 到配置代理

解決 Ubuntu 上 Docker 安裝與網絡問題的實踐筆記 在 Ubuntu(Noble 版本)上安裝 Docker 時,我遇到了兩個常見的網絡問題:apt-get update 失敗和無法拉取 Docker 鏡像。通過逐步排查和配置,最終成功運行 docker run he…

指針的進階2

六、函數指針數組 字符指針數組 - 存放字符指針的數組 char* arr[10] 整型指針數組 - 存放整型指針的數組 int* arr[10] 函數指針數組 - 存放函數指針的數組 void my_strlen() {} int main() {//指針數組char* ch[5];int arr[10] {0};//pa是是數組指針int (*pa)[10] &…

速盾:高防CDN節點對收錄有影響嗎?

引言 搜索引擎收錄是網站運營中至關重要的環節,它直接影響著網站的曝光度和流量。近年來,隨著網絡安全威脅的增加,許多企業開始采用高防CDN(內容分發網絡)來保護其網站免受DDoS攻擊和其他形式的網絡攻擊。然而&#x…

2025藍橋杯省賽C/C++研究生組游記

前言 至少半年沒寫算法題了,手生了不少,由于python寫太多導致行末老是忘記打分號,printf老是忘記寫f,for和if的括號也老是忘寫,差點連&&和||都忘記了。 題目都是回憶版本,可能有不準確的地方。 …

Quill富文本編輯器支持自定義字體(包括新舊兩個版本,支持Windings 2字體)

文章目錄 1 新版(Quill2 以上版本)2 舊版(Quill1版本) 1 新版(Quill2 以上版本) 注意:新版設置 style"font-family: Wingdings 2" 這種帶空格的字體樣式會被過濾掉,故需特…

dbt:新一代數據轉換工具

dbt(Data Build Tool)一款專為數據分析和工程師設計的開源工具,專注于 ETL/ELT 流程的數據轉換(Transform)環節,幫助用戶以高效、可維護的方式將原始數據轉換為適合分析的數據模型。 用戶只需要編寫查詢&am…

【家政平臺開發(39)】解鎖家政平臺測試秘籍:計劃與策略全解析

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

Java中的Map vs Python字典:核心對比與使用指南

一、核心概念 1. 基本定義 Python字典(dict) :動態類型鍵值對集合,語法簡潔,支持快速查找。Java Map:接口,常用實現類如 HashMap、LinkedHashMap,需聲明鍵值類型(泛型&…

C語言基礎之數組

1. 一維數組的創建和初始化 數組的創建 數組是一組相同類型元素的集合。 數組的創建方式: type_t arr_name [const_n]; //type_t 是指數組的元素類型 //const_n是一個常量表達式,用來指定數組的大小 數組創建的實例: //代碼1int arr1[10]; …

虛幻引擎5-Unreal Engine筆記之“將MyStudent變量設置為一個BP_Student的實例”這句話如何理解?

虛幻引擎5-Unreal Engine筆記之“將MyStudent變量設置為一個BP_Student的實例”這句話如何理解? code review! 文章目錄 虛幻引擎5-Unreal Engine筆記之“將MyStudent變量設置為一個BP_Student的實例”這句話如何理解?理解這句話的關鍵點1.類&#xff08…

提示詞 (Prompt)

引言 在生成式 AI 應用中,Prompt(提示)是與大型語言模型(LLM)交互的核心輸入格式。Prompt 的設計不僅決定了模型理解任務的準確度,還直接影響生成結果的風格、長度、結構與可控性。隨著模型能力和應用場景…

十二、C++速通秘籍—靜態庫,動態庫

上一章節: 十一、C速通秘籍—多線程-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147055932?spm1001.2014.3001.5502 本章節代碼: cpp2/library CuiQingCheng/cppstudy - 碼云 - 開源中國https://gitee.com/cuiqingcheng/cppst…

什么是繼承?js中有哪兒些繼承?

1、什么是繼承? 繼承是面向對象軟件技術中的一個概念。 2、js中有哪兒些繼承? js中的繼承有ES6的類class的繼承、原型鏈繼承、構造函數繼承、組合繼承、寄生組合繼承。 2.1 ES6中類的繼承 class Parent {constructor() {this.age 18;} }class Chil…

Linux進程通信入門:匿名管道的原理、實現與應用場景

Linux系列 文章目錄 Linux系列前言一、進程通信的目的二、進程通信的原理2.1 進程通信是什么2.2 匿名管道通訊的原理 三、進程通訊的使用總結 前言 Linux進程間同通訊(IPC)是多個進程之間交換數據和協調行為的重要機制,是我們學習Linux操作系…

探秘Transformer系列之(26)--- KV Cache優化 之 PD分離or合并

探秘Transformer系列之(26)— KV Cache優化 之 PD分離or合并 文章目錄 探秘Transformer系列之(26)--- KV Cache優化 之 PD分離or合并0x00 概述0x01 背景知識1.1 自回歸&迭代1.2 KV Cache 0x02 靜態批處理2.1 調度策略2.2 問題…

十大PDF解析工具在不同文檔類別中的比較研究

PDF解析對于包括文檔分類、信息提取和檢索在內的多種自然語言處理任務至關重要,尤其是RAG的背景下。盡管存在各種PDF解析工具,但它們在不同文檔類型中的有效性仍缺乏充分研究,尤其是超出學術文檔范疇。通過使用DocLayNet數據集,比…

HarmonyOS-ArkUI 裝飾器V2 @ObservedV2與@Trace裝飾器

參考文檔: 文檔中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-new-observedv2-and-trace-V14#trace%E8%A3%85%E9%A5%B0%E5%AF%B9%E8%B1%A1%E6%95%B0%E7%BB%84由于V2的裝飾器比V1的裝飾器更加易用,盡管學習的過程中用到的都是V1的裝飾器,但…

GPT - GPT(Generative Pre-trained Transformer)模型框架

本節代碼主要為實現了一個簡化版的 GPT(Generative Pre-trained Transformer)模型。GPT 是一種基于 Transformer 架構的語言生成模型,主要用于生成自然語言文本。 1. 模型結構 初始化部分 class GPT(nn.Module):def __init__(self, vocab…