精华内容
下载资源
问答
  • copy 千次阅读
    2021-07-27 00:37:17

    英文"Copy",通常音译为"拷贝",意译为"复制".也是DOS下最常用的拷贝命令。dos下面用一条COPY命令的同时复制几个文件的命令。一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy 源文件 目的路径。

    copy是一个很基础的DOS命令,也许在今天已经很少有人使用,但作为一个非常重要的基础命令,仍然需要掌握。上面关于copy命令的介绍纯属于windows下的简介,既然在cmd中输入copy /?就可以得到,那上面的这些又有什么真正的作用呢?对于这种比较专业的命令,我想还是多举举例子比较好让新手理解。

    中文名

    拷贝

    外文名

    copydos

    拷贝命令

    作    用

    复制文件

    copy用法命令

    编辑

    语音

    COPY [/D[1]

    ] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]

    [+ source [/A | /B] [+ ...]] [destination [/A | /B]]

    source 指定要复制的文件。

    /A 表示一个 ASCII 文本文件。

    /B 表示一个二进位文件。/D 允许解密要创建的目标文件

    destination 为新文件指定目录和/或文件名。

    /V 验证新文件写入是否正确。

    /N 复制带有非 8dot3 名称的文件时,

    尽可能使用短文件名。

    /Y 不使用确认是否要覆盖现有目标文件的提示。

    /-Y 使用确认是否要覆盖现有目标文件的提示。[2]

    /Z 用可重新启动模式复制已联网的文件。命令行开关 /Y 可以在 COPYCMD环境变量中预先设定。这可能会被命令行上的 /-Y 替代。除非 COPY命令是在一个批处理脚本中执行的,默认值应为在覆盖时进行提示。要附加文件,请为目标指定一个文件,为源指定数个文件(用通配符或 file1+file2+file3 格式)。

    首先,在我的电脑D盘建立一个文件,例如1.txt,最好在其中写入一些数据。另一台互联的机器,机器名为test,上面有一个共享文件夹tool,当然要开通用户在test和共享文件夹上的权限。

    1.一台机器内,一个磁盘内的文件复制:命令copy D:\1.txt D:\2.txt 注意后面的2.txt不能省略,省略默认为建立一个原来相同文件名的文件,所以不能实现。

    2.一台机器内,不同磁盘间的文件复制:命令copy D:\1.txt E: 这样就会在E盘看到拷贝的1.txt了 。

    3.不同机器间的文件复制:相当于上传与下载[3]

    上传命令copy D:\1.txt\\test\D$这样就可以在test机器的D盘看到1.txt了;

    也可以输入:copy D:\1.txt\\test\tool这样在共享文件夹tool中也可以看到1.txt了。

    下载命令,需要先在test上的D盘建立文件2.txt ,再在tool里建立一个3.txt

    输入copy\\test\D$\2.txt D:\ 即可将test上D盘的2.txt下载到本地D盘

    输入copy\\test\tool\3.txt D: 即可将tool文件夹下的3.txt下载到本地D盘

    注:这里的D:\ 和 D: 在后面不跟子目录时作用是一样的。[4]

    例举说明

    例子1:要将文件Memo.doc复制到当前目录中的Letter.doc。

    执行以下命令:copy memo.doc letter.doc

    例子2:要将文件Memo.doc从当前驱动器的当前目录复制到位于驱动器C上的现有目录System中。

    执行以下

    命令:copy Memo.doc c:\system

    如果System目录不存在,Memo.doc文件将被复制到驱动器C的磁盘根目录下名为System的文件中。

    例子3:要将位于当前驱动器的当前目录中的Mar89.zip、Apr89.zip以及May89.zip合并,并将它们放在当前驱动器的当前目录下名为Report的文件中。

    执行以下命令:copy mar89.zip + apr89.zip + may89.zip report

    例子4:要将所有的四个文件合并进Report,而且已有名为Report的文件。

    执行以下命令:copy report + mar89.rpt + apr89.rpt + may89.rpt

    例子5:在当前驱动器的当前目录中,要将所有具有.txt扩展名的文件合并进名为Combin.doc的文件中。

    执行以下命令:copy *.txt combin.doc

    此时,打开Combin.doc文件,你会发现,该文件已将*.txt文件的所有内容合并为一篇文档。

    例子6:COPY命令将每个带有.txt扩展名的文件和它对应的.ref文件合并起来。结果是文件名相同但扩展名为.doc的文件。COPY将File1.txt与File1.ref合并形成File1.doc,然后copy将File2.txt与File2.ref合并形File2.doc,如此等等。

    执行以下命令:copy *.txt + *.ref *.doc

    例子7:要合并所有具有.txt扩展名的文件,然后合并所有具有.ref扩展名的文件,并将合并结果置Combin.doc文件中.

    执行以下命令:copy *.txt + *.ref combin.doc

    copy命令加密

    编辑

    语音

    加密条件

    准备一个EXE执行文件,或者是图片的文档,和一个自已想隐藏的TXT文档(也可以隐藏ZIP,RAR文件),要求在同一目录下。

    分别用hello.jpg和123.txt作讲解,保存为gif,保存后命名为sky,已经把这两个文件放到D盘的根目录下了

    加密工作

    准备工作做好了进入CMD 使用CMD进入需要合并的文件的目录下(输入D:即可进入d盘根目录),文件都放到了D盘根目录下,所以只进到D盘就可以了。

    进到目录下输入: copy/b hello.jpg + 123.txt= sky.gif

    复制成功了,合并后的文件命名为sky了,用看图软件打开sky.gif看上去跟原图片没有什么区别,但是记事本打开看就不同了,打开记事本,直接把sky.gif图片拖进去,出现一堆乱码,不过没关系,此时打到文档末尾(直接按Ctrl+End),看到了吧,最下面的那些内容是123.txt里的内容,这种方法是不是一种隐藏自己隐私的好方法呢。[5]

    如果隐藏的是ZIP,RAR压缩包文件,将sky.gif的后缀名更改为RAR,或ZIp,即可得到所隐藏的压缩包。[6]

    建议:先将txt文件压缩,再加密进图片,防止信息损坏。

    copy补充内容

    编辑

    语音

    copy c:\srv.exe \\ip\***$ 意思 是复制srv.exe到对方IP下的***下

    copy \\ip\***$\srv.exe c:\ 意思是复制对方***i.exe文件至本地c:\

    还有上面说的123.txt文件里面的文本开头最好空三个空格,以免头几个字符被覆盖掉,其中参数/b指定以二进制格式复制、合并文件;参数/a指定以ASCII格式复制、合并文件。这里要注意文件的顺序,二进制格式的文件应放在加号前,文本格式的文件放在加号后。[7]

    copy其他意思

    编辑

    语音

    在英文中

    n. 1. 复制本, 副本2. 一份, 一册3. 准备排印的书面材料4. (报刊等的)稿件;(可用于报纸文章或广告的)消息,信息

    vt. & vi. 1. 复制; 抄写2. 作弊;抄袭

    vt. 1. 模仿, 仿效2. 抄写;誊写

    在无线电中

    词组: copy that常表示收到的意思. 在多种FPS游戏的无线电, 二战无线电, 动作战争电影里 多次出现、使用。copy在无线通信口语中常作为平级接收,表示为收到、照做。如果作为下线对上级(如:塔台、指挥机舰、上级单位等)通信的接收则用roger that,copy与roger在此类无线通信口语中应该注意区分。

    快捷方式 ctrl+c

    PHP中

    语法copy(source,destination)参数描述

    source必需。规定要复制的文件。

    destination必需。规定复制文件的目的地。

    说明将文件从source拷贝到destination。如果成功则返回 TRUE,否则返回 FALSE。

    词条图册

    更多图册

    参考资料

    1.

    电子世界 1996年06期

    2.

    晋中师范高等专科学校学报 2000年03期

    3.

    南宁师专学报 1997年01期

    4.

    计算机文汇 1994年01期

    5.

    电脑知识 1996年02期

    6.

    软件世界 1994年10期

    7.

    电脑爱好者 1996年04期

    更多相关内容
  • ssh-copy-id for windows

    2019-01-28 17:28:50
    ssh-copy-id for windows,支持windows下的ssh-copy-id命令,加入exe所在路径到PATH环境变量即可
  • iCopy解码软件

    2017-08-18 13:59:42
    应用于iCopy的解码软件
  • Fastcopy介绍

    千次阅读 2021-11-04 17:59:08
    Fastcopy一款文件复制软件,可以窗口型式运行,也可以在 DOS 下运行命令运行,此文主要讲解和解释 FastCopy 命令行型式运行的基础命令。源于日本的高效文件复制粘贴加速软件。在2004年发布第一版,更新至今。支持拖曳...

    一、介绍
            Fastcopy一款文件复制软件,可以窗口型式运行,也可以在 DOS 下运行命令运行,此文主要讲解和解释 FastCopy 命令行型式运行的基础命令。源于日本的高效文件复制粘贴加速软件。在2004年发布第一版,更新至今。支持拖曳操作,支持三种不同的 HDD 模式。支持通配符,支持任务管理/命令行。
    官网:https://fastcopy.jp/

    二、FastCopy 命令行使用

    基本用法

    fastcopy.exe [/options] file1 file2 ... [/to=dest_dir]

    实例:

    //复制文件夹
    FastCopy.exe /cmd=diff "C:\Test Folder" /to="D:\Backup Folder\"
    //同步文件夹
    FastCopy /cmd=sync /open_window /verify /estimate "D:\Movies" /to="E:\Movies_sync\"

    参数说明:

    /cmd=(noexist_only|diff|update|sync|force_copy|move|delete)
    noexist_only            复制-如重名,则不复制
    diff                    复制-如重名,则公复制大小与时间不同的文件
    update                  复制-如重名,则复制较新的源文件
    sync                    同步-如重名,则复制大小与时间不同的文件
    force_copy              复制-覆盖重名文件
    move                    移动-覆盖重名文件并强行删除源文件
    delete                  删除-强行删除指定的文件与目录

    扩展参数:

    /speed=(full|autoslow|9-1(90%-10%)|suspend)     指定速度控制级别
    /auto_close                     拷贝结束后,自动关闭
    /force_close                    如果拷贝结束后,发生错误,也强行关闭
    /open_window                    显示Fastcopy窗口界面
    /estimate                       预测拷贝完成时间
    /balloon(=FALSE)                完成时显示气球通知(禁用: /balloon=FALSE) 
    /no_ui                          不显示确认对话框,为后台任务(如果使用/no_ui,则会自动设置/no_confirm_del /no_confirm_stop /force_close)
    /no_confirm_del                 当用/delete参数时,不显示确认界面
    /no_confirm_stop                不要显示错误对话框,即使发生严重错误
    /no_exec                        对Fastcopy窗口界面设置参数,但是不执行
    /error_stop                     发生错误时中止动作(禁用: /error_stop=FALSE)
    /bufsize=N(MB)                  用MB单位来指定缓冲器大小
    /log                            将操作/错误信息写入日志文件(FastCopy.log)(禁用: /log=FALSE)
    /logfile=filename               指定日志文件的文件名
    /filelog                        写入文件日志(复制/删除文件的详细信息)(指定filelogname,/filelog=filename)
    /utf8                           使用UTF-8编码写入日志文件(支持Unicode)
    /skip_empty_dir                 启用过滤,不拷贝空文件夹(在/skip_empty_dir=FALSE抑制)
    /job=job_name                   任务名称 执行指定的任务
    /force_start(=N)                立即开始,不用等待其他FastCopy执行完成。 (/force_start=2-N 指定最大并行进程数)
    /disk_mode=(auto|same|diff)     指定自动/恒等性/其他HDD方式。(债务不履行声明:) auto)
    /srcfile="files.txt"            通过文本文件指定源文件,用户每行可以描述1个文件名
    /srcfile_w="files.txt"          与“/srcfile=”相同,除了由UNICODE描述
    /include="..."                  指定Include过滤器
    /exclude="..."                  指定Exclude过滤器
    /from_date                      指定最旧的时间戳过滤器
    /to_date                        指定最新的时间戳过滤器
    /min_size="..."                 指定最小尺寸过滤器
    /max_size="..."                 指定最大尺寸过滤器
    /wipe_del                       在删除之前重命名文件名并擦除(覆盖随机数据)
    /acl                            复制ACL/EA(仅限于NTFS)(禁用:/acl=FALSE)
    /stream                         复制备用流(仅限于NTFS)(禁用:/stream=FALSE)
    /reparse                        复制联结/装载点/符号链接本身(禁用:/reparse=FALSE)
    /verify                         通过MD5验证写入的文件数据(/SHA-1/SHA-256/xxHash)(禁用:/verify=FALSE)
    /linkdest                       尽可能重现硬链接
    /recreate                       将更新行为更改为“覆盖目标”,以“删除并重新创建目标”
    /postproc=action_name           指定后处理操作名称(禁用:/postproc=FALSE)
    /to=dest_dir                    目标路径

    三、FastCopy窗口操作使用

    1、双击打开Fastcopy软件,我们可以看到主界面由四部分组成:菜单、拷贝内容、拷贝类型、拷贝提示。

    2、单击[source]按钮,弹出一个窗口选择要复制或移动的文件,然后单击[select]按钮。

    3、同样单击【DestDir】按钮,弹出一个窗口选择要拷贝到的目标地址,然后单击【选择文件夹】按钮。

    4、选择文件操作的类型:Diff、Copy、Sync、Move等,我们此时以Diff增量拷贝文件举例。

    5、选择好文件来源与目标后,我们就可以单击[Execute]按钮来进行复制操作。

    6、复制过程中,这个过程是很快的,我们会看到复制的文件一直在快速的跳动。

    7、复制完成我们看到了提示信息以及复制文件所用的总时间,比起windows的复制时间还是快了很多。

     四、文件复制软件评测:FastCopy、TeraCopy、ExtremeCopy、Supercopier
    文件复制软件评测:FastCopy、TeraCopy、ExtremeCopy、Supercopier – 善用佳软

    五、注意事项
    1、注意目标盘后必须加 右斜杠 \ 。
    2、强行删除桌面

    FastCopy /cmd=delete /no_confirm_del /error_stop=FALSE /auto_close /force_close /log "C:\Documents and Settings\Administrator\桌面\复件"

    3、远程复制
    远程地址格式如下:\\IP地址\磁盘符号$\文件夹名称(如:127.0.0.1\\c$\\image)拷贝了image文件夹下面的所有文件,但是如果远程机器有密码的话要先在本机先输入远程的目标地址然后会提示你输入密码,这时你要输入一次密码,然后点击记住我的凭证。这样机器就会在本次记住你得密码,然后就可以在fastcopy中继续使用这个地址拷贝了。
    登陆局域网上其它机器共享文件夹的批处理命令:

    net use * \\ipaddr\share "password" /user:"username" /persistent:yes
    展开全文
  • postgresql copy from、copy to

    千次阅读 2020-10-02 22:47:24
    使用postgresql官方提供的copy来进行数据的高效导入导出,分别介绍命令行使用方法和Java中的使用方法。

    postgresql的copy命令用来在文件和表之间进行数据复制,复制效率很高。

    官方提供了命令行的copy命令以及Java封装的copy,下文将分别介绍说明。

    命令行copy

    copy有两个命令:COPY FROM和COPY TO。

    COPY TO用于把一个表的内容复制到一个文件;COPY FROM从文件复制数据到表中。

    COPY TO中也可以指定查询,将查询结果写入文件。COPY FROM中,文件的字段按照顺序写入到指定列中。

    语法

    COPY table_name [ ( column_name [, ...] ) ]
        FROM { 'filename' | PROGRAM 'command' | STDIN }
        [ [ WITH ] ( option [, ...] ) ]
        [ WHERE condition ]
    
    COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
        TO { 'filename' | PROGRAM 'command' | STDOUT }
        [ [ WITH ] ( option [, ...] ) ]
    
    其中 option 可以是下列之一:
        FORMAT format_name 
        FREEZE [ boolean ]
        DELIMITER 'delimiter_character'
        NULL 'null_string'
        HEADER [ boolean ]
        QUOTE 'quote_character'
        ESCAPE 'escape_character'
        FORCE_QUOTE { ( column_name [, ...] ) | * }
        FORCE_NOT_NULL ( column_name [, ...] )
        FORCE_NULL ( column_name [, ...] )
        ENCODING 'encoding_name'
    

    参数说明

    table_name:已有表的表名

    column_name:要被复制的列列表

    query:指定查询语句,将查询结果导出

    file:输入或输出的文件名

    PROGRAM:要执行的命令。COPY FROM中,输入从该命令的输出获取;COPY TO中,输出写入到该命令的标准输入。

    STDIN:指定标准输入流

    STDOUT:指定标准输出流

    boolean:指定选项打开还是关闭。ture、false

    FORMAT:选择要读取或者写入的数据格式:text、csv等

    DELIMITER:指定分割每列的字符

    NULL:指定表示一个空值的字符串。文本格式中默认是 \N(反斜线-N),CSV格式中默认 是一个未加引用的空串。

    HEADER:指定文件包含标题行。

    ENCODING:指定文件的编码,如果省略,将使用当前客户端编码

    WHERE:COPY FROM时指定条件,不满足条件不会写入

    注意

    复制语句有:copy和\copy两种。

    copy是服务器端来进行读取或写入,文件必须位于服务器端,且启动服务器的用户对文件可以读写。

    \copy是客户端来进行读取或写入,是取决于客户端,文件位于客户端且启动客户端的用户对文件有访问权限。

    示例

    • 导出表tb1的数据到tb1.csv中,带有标题行且列之间的分隔符为|
    \copy ( select * from tb1) to '/home/export/tb1.csv' delimiter '|' csv header; 
    
    • 导入数据到表tb1中
    \copy tb1 from '/home/export/tb1.csv'
    with (FORMAT csv, DELIMITER '|', HEADER true);
    

    更多命令相关信息可查看官方文档

    Java封装的copy

    官方提供的org.postgresql.copy包下的相关类,可以通过Java的输入输出流将表进行数据导出或写入。

    相关方法

    主要是CopyManager提供的两个方法:copyOut和copyIn。

    copyOut是将表的数据写入到标准输出流,传入文件输出流即可写入文件。

    copyIn是从标准输入流导入数据,传入文件对应的输入流即可导入。

    copyIn参数
    sql:形如"copy tb1 from stdin"的sql,tb1是要导入数据的表名
    Reader/InputStream:输入流,字节流/字符流
    bufferSize:每次读入的字节buffer大小
    
    copyOut参数
    sql:形如"copy (select * from tb1) to stdout"的sql,括号里sql查询结果是要导出的数据
    Writer/OutputStream:输出流,字节流/字符流
    

    pom依赖

    <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.16</version>
    </dependency>
    

    demo代码

    package com.upupfeng.postgres;
    
    import org.postgresql.copy.CopyManager;
    import org.postgresql.core.BaseConnection;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class PgConnection {
    
        private String dbUrl;
        private String user;
        private String password;
    
        public PgConnection(String dbUrl, String user, String password) {
            this.dbUrl = dbUrl;
            this.user = user;
            this.password = password;
        }
    
        // 获取数据库连接
        public Connection getConnection() throws ClassNotFoundException, SQLException {
            Class.forName("org.postgresql.Driver");
            return DriverManager.getConnection(dbUrl, user, password);
        }
    
        // 将表数据写入到文件
        public void copy2File(Connection conn, String sql, String path) throws SQLException, IOException {
            CopyManager copyManager = new CopyManager(conn.unwrap(BaseConnection.class));
            try (FileOutputStream fileOutputStream = new FileOutputStream(path)) {
                copyManager.copyOut(String.format("copy (%s) to stdout", sql), fileOutputStream);
            }
        }
    
        // 将文件数据写入表中
        public void copy2DB(Connection conn, String tableName, String path) throws IOException, SQLException {
            CopyManager copyManager = new CopyManager(conn.unwrap(BaseConnection.class));
            try (FileInputStream fileInputStream = new FileInputStream(path)) {
                copyManager.copyIn(String.format("copy %s from stdin", tableName), fileInputStream);
            }
        }
    
        public static void main(String[] args) throws Exception {
            String dbUrl = "jdbc:postgresql://192.168.168.200:5432/mwf_db";
            String user = "mwf";
            String password = "123456";
    
            String sql = "select * from tb1";
            String destPath = "D:\\tb1.csv";
    
            String srcPath = "D:\\tb1.csv";
            String table = "tb1";
    
            PgConnection pgConnection = new PgConnection(dbUrl, user, password);
            Connection connection = pgConnection.getConnection();
    
            pgConnection.copy2File(connection, sql, destPath);
    
            pgConnection.copy2DB(connection, table, srcPath);
        }
        
    }
    
    

    参考

    http://postgres.cn/docs/12/sql-copy.html

    https://blog.csdn.net/wtopps/article/details/79097748

    展开全文
  • PostgreSQL 导入和导出 CSV 文件 语法 ...# \encoding # show client_encoding; # set client_encoding = 'iso-8859-1'; //CSV文件字符格式,不然会乱码 # COPY 表名 FROM 'CSV文件' ...***************************COPY

    PostgreSQL 导入和导出 CSV 文件

    语法

    # psql -d 数据库 -U 用户名
    # \encoding
    # show client_encoding;
    # set client_encoding = 'iso-8859-1'; //CSV文件字符格式,不然会乱码
    # COPY 表名 FROM 'CSV文件' WITH DELIMITER ',' NULL AS '' CSV HEADER QUOTE AS '|';
    # \q
    
    ***************************COPY 说明文档*********************
    COPY
    名称
    COPY -- 在表和文件之间拷贝数据
    语法
    COPY tablename [ ( column [, ...] ) ]
        FROM { 'filename' | STDIN }
        [ [ WITH ] 
              [ BINARY ]
              [ OIDS ]
              [ DELIMITER [ AS ] 'delimiter' ]
              [ NULL [ AS ] 'null string' ]
              [ CSV [ HEADER ]
                    [ QUOTE [ AS ] 'quote' ] 
                    [ ESCAPE [ AS ] 'escape' ]
                    [ FORCE NOT NULL column [, ...] ]
    
    COPY { tablename [ ( column [, ...] ) ] | ( query ) }
        TO { 'filename' | STDOUT }
        [ [ WITH ] 
              [ BINARY ]
              [ HEADER ]
              [ OIDS ]
              [ DELIMITER [ AS ] 'delimiter' ]
              [ NULL [ AS ] 'null string' ]
              [ CSV [ HEADER ]
                    [ QUOTE [ AS ] 'quote' ] 
                    [ ESCAPE [ AS ] 'escape' ]
                    [ FORCE QUOTE column [, ...] ]描述
    

    COPY 在表和文件之间交换数据。COPY TO 把一个表的所有内容都拷贝到一个文件,而 COPY FROM 从一个文件里拷贝数据到一个表里(把数据附加到表中已经存在的内容里)。COPY TO 还能拷贝 SELECT 查询的结果。

    如果声明了一个字段列表,COPY 将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,那么 COPY FROM 将为那些字段插入缺省值。

    带文件名的 COPY 指示 PostgreSQL 服务器直接从文件中读写数据。如果声明了文件名,那么服务器必须可以访问该文件,而且文件名必须从服务器的角度声明。如果指定了 STDIN 或 STDOUT ,那么数据将在客户前端和服务器之间流动。

    参数

    tablename 
    

    现存表的名字(可以有模式修饰)

    column 
    

    可选的待拷贝字段列表。如果没有声明字段列表,那么将使用所有字段。

    query 
    

    一个必须用圆括弧包围的 SELECT 或 VALUES 命令,其结果将被拷贝。

    filename 
    

    输入或输出文件的绝对路径。Windows 用户可能需要使用 E’’ 字符串和双反斜线作为路径分割符。

    STDIN 
    

    声明输入是来自客户端应用

    STDOUT 
    

    声明输入前往客户端应用

    BINARY 
    

    使用二进制格式存储和读取,而不是以文本的方式。在二进制模式下,不能声明 DELIMITER, NULL, CSV 选项。

    OIDS 
    

    声明为每行拷贝内部对象标识(OID)。如果为一个 query 拷贝或者没有 OID 的表声明了 OIDS 选项,则抛出一个错误。

    delimiter 
    

    在文件中分隔各个字段的单个字符。在文本模式下,缺省是水平制表符,在 CSV 模式下是一个逗号。

    null string 
    

    这是一个代表 NULL 值的字符串。在文本模式下缺省是 \N ,在 CSV 模式下是一个没有引号的 NULL 。如果你不想区分 NULL 和空字符串,那么即使在文本模式下你可能也会使用一个空字符串。

    【注意】在使用 COPY FROM 的时候,任何匹配这个字符串的字符串将被存储为 NULL 值,所以你应该确保你用的字符串和 COPY TO 相同。

    CSV

    打开逗号分隔变量(CSV)模式

    HEADER
    声明文件包含一个标题头行,包含文件中每个字段的名字。输出时,第一行包含表的字段名;输入时,第一行被忽略。

    quote
    声明 CSV 模式里的引号字符。缺省是双引号。

    escape
    声明在 CSV 模式下应该出现在数据里 QUOTE 字符值前面的字符。缺省是 QUOTE 值(通常是双引号)。

    FORCE QUOTE
    在 CSV COPY TO 模式下,强制在每个声明的字段周围对所有非 NULL 值都使用引号包围。NULL 输出从不会被引号包围。

    FORCE NOT NULL
    在 CSV COPY FROM 模式下,把声明的每个字段都当作它们有引号包围来处理,因此就没有 NULL 值。对于在 CSV 模式下的缺省空字符串(’’),这样导致一个缺失的数值当作一个零长字符串输入。

    输出
    成功完成时,COPY 按照如下格式返回一个命令标签:

    COPY count其中的 count 是拷贝的行数。

    注意
    COPY 只能用于表,不能用于视图。当然也可以用于 COPY (SELECT * FROM viewname) TO …

    BINARY 关键字将强制使用二进制对象而不是文本存储/读取所有数据。这样做在一定程度上比传统的拷贝命令快,但二进制拷贝文件在不同机器体系和 PostgreSQL 版本之间的移植性不是很好。

    你对任何要 COPY TO 出来的数据必须有选取数据的权限,对任何要 COPY FROM 入数据的表必须有插入权限。

    COPY 命令里面的文件必须是由服务器直接读或写的文件,而不是由客户端应用读写。因此,它们必须位于数据库服务器上或者可以被数据库服务器所访问,这些事情不应该由客户端来做。它们必须被运行 PostgreSQL 服务器的用户可读或写,而不是客户端。只允许数据库超级用户 COPY 一个文件,因为它允许读写任意服务器有权限访问的文件。

    不要混淆 COPY 和 psql 的 \copy 指令。\copy 调用 COPY FROM STDIN 或 COPY TO STDOUT ,然后把数据抓取/存储到一个 psql 客户端可以访问的文件中。因此,使用 \copy 的时候,文件访问权限是由客户端而不是服务器端决定的。

    建议在 COPY 里的文件名字总是使用绝对路径。在 COPY TO 的时候是由服务器强制进行的,但是对于 COPY FROM ,你的确可从一个相对路径的文件里读取。该路径将解释为相对于服务器的工作目录(通常是数据目录),而不是客户端的工作目录。

    COPY FROM 会激活所有触发器和检查约束。不过,不会激活规则。

    COPY 输入和输出被 DateStyle 影响。为了和其它 PostgreSQL 安装移植(它们可能是非缺省 DateStyle 设置),应该在使用 COPY TO 前把 DateStyle 设置为 ISO 。

    COPY 在第一个错误处停下来。这些在 COPY TO 中不应该导致问题,但在 COPY FROM 时目标表会已经接收到早先的行,这些行将不可见或不可访问,但是仍然会占据磁盘空间。如果你碰巧拷贝大块数据文件的话,这些东西积累起来可能会占据相当大的磁盘空间。你可以调用 VACUUM 来恢复那些磁盘空间。

    文件格式

    当不带 BINARY 或 CSV 选项使用 COPY 时,读写的文件是一个文本文件,每行代表表中一个行。行中的列(字段)用分隔符分开。字段值本身是由与每个字段类型相关的输出函数生成的字符串,或者是输入函数可接受的字符串。数据中使用特定的 NULL 字符串表示那些值为 NULL 的字段。如果输入文件的任意行包含比预期多或者少的字段,那么 COPY FROM 将抛出一个错误。如果声明了 OIDS ,那么 OID 将作为第一个字段读写,放在所有用户字段前面。

    数据的结束可以用一个只包含反斜杠和句点(.)的行表示。如果从文件中读取数据,那么数据结束的标记是不必要的,因为文件结束起的作用就很好了;但是在 3.0 之前的客户端协议里,如果在客户端应用之间拷贝数据,那么必须要有结束标记。

    反斜杠字符()可以用在 COPY 里给那些会有歧义的字符进行逃逸(否则那些字符会被当做行或者字段分隔符处理)。特别是下面的字符如果是字段值的一部分时,必须前缀一个反斜杠:反斜杠本身、换行符、回车符、当前分隔符。

    声明的空字符串被 COPY TO 不加任何反斜杠发送;与之相对,COPY FROM 在删除反斜杠之前拿它的输入与空字符串比较。因此,像 \N 这样的空字符串不会和实际数据值 \N 之间混淆(因为后者会表现成 \N)。

    COPY FROM 能够识别下列特殊反斜杠序列:

    序列含义
    \b反斜杠 (ASCII 8)
    \f进纸 (ASCII 12)
    \n换行符 (ASCII 10)
    \r回车符 (ASCII 13)
    \t水平制表符 (ASCII 9)
    \v垂直制表符 (ASCII 11)
    \digits反斜杠后面跟着一到三个八进制数,表示 ASCII 值为该数的字符
    \xdigits反斜杠 x 后面跟着一个或两个十六进制位声明指定数值编码的字符

    目前,COPY TO 绝不会发出一个八进制或者十六进制反斜杠序列,但是它的确使用了上面列出的其它字符用于控制字符。

    任何上表列出之外的其它反斜杠逃役字符将使用其字面含义。因此要小心添加不必要的反斜杠,因为这样做可能会生成一个含有数据结束标志(.)的字符串或 NULL(默认为 \N)。这些字符串将在识别任何其它反斜杠逃逸之前被识别。

    强烈建议生成 COPY 数据的应用把换行符和回车分别转换成 \n 和 \r 序列。目前可以用一个反斜杠和一个回车表示一个数据回车,以及用一个反斜杠和一个换行符表示一个数据换行符。不过,这样的表示在将来的版本中可能不会被接受。并且,如果在不同机器之间传递 COPY 文件,也非常容易出错(比如在 Unix 和 Windows 之间)。

    COPY TO 将在每行的结尾用一个换行符(Unix 上是"\n",Windows 上是"\r\n")标记一行终止,但只是用于 COPY 到服务器文件里;为了在不同平台之间一致,COPY TO STDOUT 总是发送 “\n” 而不管服务器平台是什么。COPY FROM 可以处理那些以回车符、换行符、回车换行符作为行结束的数据。为了减少在数据中出现的未逃逸的新行或者回车导致的错误,如果输入的行结尾不像上面这些符号,COPY FROM 会发出警告。

    CSV 格式

    这个格式用于输入和输出逗号分隔数值(CSV)文件格式,许多其它程序都用这个文件格式,比如电子报表。这个模式下生成并识别逗号分隔的 CSV 逃逸机制,而不是使用 PostgreSQL 标准文本模式的逃逸。

    每条记录的值都是用 DELIMITER 字符分隔的。如果数值本身包含分隔字符、QUOTE 字符、NULL 字符串、回车符、换行符,那么整个数值用 QUOTE 字符前缀和后缀(包围),并且数值里任何 QUOTE 字符或 ESCAPE 字符都前导逃逸字符。你也可以使用 FORCE QUOTE 在输出非 NULL 的指定字段值时强制引号包围。

    CSV 格式没有标准的办法区分一个 NULL 值和一个空字符串。PostgreSQL 的 COPY 通过引号包围来处理这些。一个当作 NULL 输出的 NULL 值是没有引号包围的,而匹配 NULL 字符串的数据值是用引号包围的。因此,使用缺省设置时,一个 NULL 是写做一个无引号包围的空字符串,而一个空字符串写做双引号包围("")。读取数值也遵循类似的规则。你可以使用 FORCE NOT NULL 来避免为特定字段进行 NULL 比较。

    因为对于 CSV 格式而言,反斜杠不是特殊字符,数据的结束标志(.)可以作为数据值出现。为了避免任何可能的歧意,一个单独的 . 数据值在输出中将被自动使用引号包围;在输入中,如果被引号界定,那么将不会当作数据结束标志。如果你要加载其它程序创建的、有未用引号界定字段的文件,并且其中含有 . 值,你就必须用引号进行界定。

    【注意】在 CSV 模式下,所有字符都是有效的。一个被空白包围的引号界定数值,或者任何非 DELIMITER 字符,都会被包含这些字符。如果你从会给 CSV 行填充空白的系统里导入数据到定长字段,那么可能会导致错误。如果出现这种情况,你可能需要先处理一下 CSV 文件,删除结尾空白,然后再向 PostgreSQL 里导入数据。

    【注意】CSV 模式可以识别和生成引号包围的回车和换行的 CVS 文件。因此这些文件并不像文本模式的文件那样严格地每条记录一行。

    【注意】许多程序生成奇怪的并且有时候不正确的 CVS 文件,所以这个文件格式更像一种惯用格式,而不是一种标准。因此你可能碰到一些不能使用这个机制输入的文件,而 COPY 也可能生成一些其它程序不能处理的文件。

    二进制格式

    在 PostgreSQL 7.4 中 COPY BINARY 的文件格式发生了变化。新格式由一个文件头、零或多条行、文件尾组成。文件头和数据现在是网络字节顺序。

    文件头
    文件头由 15 个字节的固定域组成,后面跟着一个变长的头扩展区。固定域是:

    签名
    11 字节的序列 PGCOPY\n\377\r\n\0(请注意字节零是签名必须的一部分)。使用这个签名是为了能够很容易看出文件是否已经被一个非 8 位安全的转换器给破坏了。这个签名会被行尾转换过滤器、删除字节零、删除高位、奇偶变化而改变。

    标志域
    32 位整数掩码表示该文件格式的重要方面。位是从 0(LSB)到 31(MSB)编码的,请注意这个域是以网络字节顺序存储的(高位在前),后继的整数都是如此。位 16-31 是保留用做关键文件格式信息的;如果阅读器发现一个不认识的位出现在这个范围内,那么它应该退出。位 0-15 都保留为标志向后兼容的格式使用;阅读器可以忽略这个范围内的不认识的位。目前只定义了一个标志位,而其它的必须是零:

    Bit 16
    如果为 1 ,那么在数据中包括了 OID ;如果为 0 ,则没有。

    头扩展范围长度
    32 位整数,以字节计的头剩余长度,不包括自身。目前,它是零,后面紧跟第一条记录行。对该格式的更多修改都将允许额外的数据出现在头中。阅读器应该忽略任何它不知道该如何处理的头扩展数据。

    头扩展数据用来保存自定义数据序列块。这个标志域无意告诉阅读器扩展区的内容是什么。头扩展的具体设计内容留给以后的版本使用。

    这样设计就允许向后兼容的头扩展(增加头扩展块或设置低位序标志位)以及非向后兼容的修改(设置高位标志位以标识这样的修改,并且根据需要向扩展区域增加支持数据)。


    每条行都以一个 16 位整数计数开头,该计数是行中字段的数目(目前,在一个表里的每条行都有相同的计数,但可能不会永远这样)。然后后面不断出现行中的各个字段,字段先是一个 32 位的长度字,后面跟着那么长的字段数据。长度字并不包括自己,并且可以为零。一个特例是:-1 表示一个 NULL 字段值。在 NULL 情况下,后面不会跟着数值字节。

    在数据域之间没有对齐填充或者任何其它额外的数据。

    目前,一个 COPY BINARY 文件里的所有数据值都假设是二进制格式的(格式代码为一)。预计将来的扩展可能增加一个头域,允许为每个字段声明格式代码。

    为了判断实际行数据的正确二进制格式,你应该阅读 PostgreSQL 源代码,特别是该字段数据类型的 *send 和 *recv 函数(典型的函数可以在源代码的 src/backend/utils/adt/ 目录找到)。

    如果在文件中包括了 OID ,那么该 OID 域立即跟在字段计数字后面。它是一个普通的字段,只不过它没有包括在字段计数。但它包括长度字,这样就允许方便的处理 4 字节和 8 字节的 OID ,并且如果某个家伙允许 OID 是可选的话,那么还可以把 OID 显示成空。

    文件尾
    文件尾包括保存着 -1 的一个 16 位整数字。这样就很容易与一条行的域计数字相区分。

    如果一个域计数字既不是 -1 也不是预期的字段的数目,那么阅读器应该报错。这样就提供了对丢失与数据同步的额外检查。

    例子

    下面的例子把一个表拷贝到客户端,使用竖直条(|)作为域分隔符:

    COPY country TO STDOUT WITH DELIMITER ‘|’;从文件中拷贝数据到 country 表中:

    COPY country FROM ‘/usr1/proj/bray/sql/country_data’;使用一个会被自动删除的临时表,把’A’开头的国家名拷贝到一个文件里:

    COPY (SELECT * FROM country WHERE country_name LIKE ‘A%’) TO ‘/usr1/proj/bray/sql/a_list_countries.copy’;下面是一个可以从 STDIN 中拷贝数据到表中的例子:

    AF      AFGHANISTAN
    AL      ALBANIA
    DZ      ALGERIA
    ZM      ZAMBIA
    ZW      ZIMBABWE注意,每行里的空白实际上是一个水平制表符。
    

    下面的是同样的数据,以二进制形式输出。这些数据是用 Unix 工具 od -c 过滤之后输出的。该表有三个字段;第一个是 char(2) ,第二个是 text ,第三个是 integer 。所有的行在第三个域都是一个 null 值。

    0000000   P   G   C   O   P   Y  \n 377  \r  \n  \0  \0  \0  \0  \0  \0
    0000020  \0  \0  \0  \0 003  \0  \0  \0 002   A   F  \0  \0  \0 013   A
    0000040   F   G   H   A   N   I   S   T   A   N 377 377 377 377  \0 003
    0000060  \0  \0  \0 002   A   L  \0  \0  \0 007   A   L   B   A   N   I
    0000100   A 377 377 377 377  \0 003  \0  \0  \0 002   D   Z  \0  \0  \0
    0000120 007   A   L   G   E   R   I   A 377 377 377 377  \0 003  \0  \0
    0000140  \0 002   Z   M  \0  \0  \0 006   Z   A   M   B   I   A 377 377
    0000160 377 377  \0 003  \0  \0  \0 002   Z   W  \0  \0  \0  \b   Z   I
    0000200   M   B   A   B   W   E 377 377 377 377 377 377兼容性
    

    SQL 标准里没有 COPY 语句。

    PostgreSQL 7.3 以前使用下面的语法,现在仍然支持:

    COPY [ BINARY ] tablename [ WITH OIDS ]
        FROM { 'filename' | STDIN }
        [ [USING] DELIMITERS 'delimiter' ]
        [ WITH NULL AS 'null string' ]
    
    COPY [ BINARY ] tablename [ WITH OIDS ]
        TO { 'filename' | STDOUT }
        [ [USING] DELIMITERS 'delimiter' ]
        [ WITH NULL AS 'null string' ]
    
    eg : ./psql -U cdc -d cdc -c "COPY regionlist TO stdout with csv" > /tmp/lzh.config
    
    ./psql -U cdc -d cdc -c "COPY regionlist TO stdout " > /tmp/lzh.config
    
    展开全文
  • 向数据库导入数据?试试COPY FROM STDIN语句

    千次阅读 多人点赞 2022-03-16 09:08:25
    用户可以使用以下方式通过COPY FROM STDIN语句直接向openGauss写入数据。 通过键盘输入向openGauss数据库写入数据。详细请参见COPY。 通过JDBC驱动的CopyManager接口从文件或者数据库向openGauss写入数据。此方法...
  • copy.copy()函数用法

    千次阅读 2021-03-17 01:10:05
    b = copy.copy(a)copy.copy这个函数结果会因为是可变或者不可变导致结果不同只能拷贝一层。根据类型有关。如果是列表(可变类型),深拷贝。如果是元组(不可变)浅拷贝如果里面还有嵌套的对象,浅拷贝import copya = [1...
  • PostgreSQL copy协议与事务

    千次阅读 2021-07-14 11:25:40
    今天看到有人问“PostgreSQL中的copy命令是在同一个事务中执行的吗”。其实我想之所以提出这个问题,主要是想知道在执行copy语句时如果出现错误导致中断,那么数据是会导出/入部分,还是会像事务一样回滚。为了解答...
  • python怎样copy对象

    千次阅读 2020-12-29 08:46:55
    copy.copy 浅拷贝 仅仅拷贝父对象,不会拷贝对象的内部的子对象。copy.deepcopy 深拷贝 拷贝对象及其子对象例如import copya = [1, 2, 3, 4, ['a', 'b']] #原始对象e = a[:] #利用分片操作进行拷贝(浅拷贝)b = a #...
  • Dockerfile中的copy命令

    千次阅读 2021-12-08 14:47:31
    在编写Dockerfile的时候copy宿主机文件到镜像中,在执行构建的时候报错 guoliang@gldeMacBook-Pro docker_file % docker build -f Dockerfile -t jmeter01 . [+] Building 3.3s (15/16) => [in
  • copyTo 使用方法

    千次阅读 热门讨论 2019-07-17 19:25:34
    原地址:... openCV中image.copyTo()有两种形式: 1、image.copyTo(imageROI),作用是把image的内容粘贴到imageROI; 2、image.copyTo(imageROI,mask),作用是把mask和image重叠传递给imageRo...
  • copy既能做名词也能做动词,那么copy做名词和动词分别都有哪些意思呢?下面学习啦小编为大家带来copy的英语意思解释和英语例句,希望对你有所帮助!copy作名词的意思:复制品;一份;(报刊等的)稿件copy作动词的意思:...
  • 一、copy 头文件algorithm template &amp;lt;class InputIterator, class OutputIterator&amp;gt; OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result); 复制元素范围...
  • 【略解】copy机制与SpanPtr

    千次阅读 2020-02-16 17:53:26
    背景:学习多领域多轮问答DST模型TRADE,发现其中一个技术点copy机制,对其调研如下: 1.1 Copy机制相关论文 No. 标题 简介 1 Vinyals et al., 2015 《Pointer networks》 Pointer network;index-based ...
  • Dockerfile COPY指令 语法解析

    千次阅读 2020-11-09 11:11:32
      使用dockerfile创建镜像时,肯定会涉及到文件复制、文件下载等操作,这时需要COPY指令来完成。   COPY 语法 COPY [--chown=<user>:<group>] <src>... <dest> COPY [--chown=<user&...
  • 1hutool实战:IoUtil 流操作工具类(copy拷贝操作)

    万次阅读 多人点赞 2021-06-07 19:39:47
    hutool实战:IO工具类(copy拷贝操作) 关键字:java java JAVA hutool hutool Hutool 工具类 工具类 工具类 IoUtil IoUtil IoUtil
  • 对于简单的 object,用 shallow copy 和 deep copy 没区别 复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子list,并未从原 object 真的「独立」出来。也就是说,如果你改变原 object 的子 list ...
  • Dockerfile(11) - COPY 指令详解

    千次阅读 2021-11-03 15:32:28
    一段话总结完 COPY 作用:复制内容到镜像 格式:COPY <src> <dest> 详解:复制本地主机的 <src>下内容到镜像中的 <dest>,目标路径不存在时,会自动创建。 <src>:可以是Dockerfile...
  • 批处理命令(copy)详解

    万次阅读 多人点赞 2020-04-25 23:30:59
    copy[源盘符:][路径]<源文件名>[a|b][目标盘符:][路径]<目标文件>[a|b][/d][/v][/n][y|-y][/z][/?] copy<源文件名>+<源文件名2>[+……][<目标文件名>] copy con:[文件名全称] 参数 ...
  • copy函数

    千次阅读 2021-02-06 12:28:48
    copy(iterator beg, iterator end, iterator dest) beg 开始迭代器 end 结束迭代器 dest 目标起始迭代器 #include<iostream> #include<vector> #include<algorithm> #include<ctime> ...
  • iCopy和fclone和TG-bot构建gd转存保姆教程

    万次阅读 多人点赞 2020-07-19 16:52:41
    cd /root/iCopy python3 iCopy.py 2020-7-22更新:方法二(简单): cd ~ cd iCopy screen -dmS iCopy `which python3` iCopy.py 完成!愉快玩耍吧! ④其他亿些细节 1.升级 必须进入iCopy目录才能升级 cd iCopy git...
  • 通过对C#文档中Array.Copy()和Buffer.BlockCopy()两个方法的整理,深刻理解其运行原理及实现方式。在理解了Array.Copy()之后,从而对List<T>的拷贝、插入、删除操作实现,有一个更深入的理解。 一、Array....
  • DockerFile的ADD和COPY的区别

    千次阅读 2021-02-23 14:02:26
    Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的。 COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的...
  • Copy On Write机制了解一下

    万次阅读 多人点赞 2019-05-15 17:29:50
    执行BGSAVE命令或者BGREWRITEAOF命令的过程中,Redis需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率,所以在子进程存在期间,服务器会提高负载因子的阈值...
  • PostgreSQL copy 命令教程

    千次阅读 2021-01-17 21:21:21
    报文介绍PostgreSQL copy 命令,通过示例展示把查询结果导出到csv文件,导入数据文件至postgresql。 1. copy命令介绍 copy命令用于在postgreSql表和标准文件系统直接传输数据。copy命令让PostgreSQL 服务器直接读写...
  • 如果类型实现了Copy trait,在copy语义中并不会调用Clone::clone方法,不会做deep copy,那就会出现两个变量同时拥有一个资源(比如说是heap内存等),在这两个变量离开作用范围时,会分别调用Drop::drop方法释放...
  • OpenCV copyTo()函数

    千次阅读 2022-01-03 21:32:10
    文章目录copyTo()函数原型简单示例mask参数深入探究 copyTo() 函数原型 copyTo这个函数有两种定义方式,分别是: void copyTo( OutputArray m ) const; void copyTo( OutputArray m, InputArray mask ) const; ...
  • STL算法之 copycopy_backward、copy_n

    千次阅读 2016-07-20 23:03:46
    这些函数都定义在stl_algobase.h里面,使用时只需要包含 ...copy :STL 的SGI版本中的copy函数声明如下:template , class OutputIterator> inline OutputIterator copy(InputIterator first, InputIterator last, O
  • Dockerfile 中的 COPY 与 ADD 命令

    万次阅读 2020-09-15 22:06:00
    Dockerfile 中提供了两个非常相似的命令 COPY 和 ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景。 Build 上下文的概念 在使用 docker build 命令通过 Dockerfile 创建镜像时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,959,223
精华内容 783,689
关键字:

copy