首页 > 解决方案 > 在 PostgreSQL COPY 命令中添加行号

问题描述

当我运行时,COPY my_table FROM 'my_table_source.csv' WITH HEADER CSV;是否可以提取 csv 文件中的行号并将该信息添加到我的目标表中?我有一些来自外部来源的平面文件,并进入多个数据库,这些文件对于在以后进行的偶尔审计期间进行追溯很有用。谢谢。

标签: postgresql

解决方案


添加列名并省略序列名:


CREATE TEMP TABLE passwords (
        seq serial not null PRIMARY KEY
        , name text
        , passwd text
        , uid integer not null
        , gid integer not null
        , gcos text
        , home text
        , shell text
        );
COPY passwords(name,passwd,uid,gid,gcos,home,shell)
FROM '/etc/passwd' WITH csv DELIMITER ':' ;

SELECT * FROM passwords
WHERE seq < 10
        ;

输出:


CREATE TABLE
COPY 48
 seq |  name  | passwd | uid |  gid  |  gcos  |      home      |       shell       
-----+--------+--------+-----+-------+--------+----------------+-------------------
   1 | root   | x      |   0 |     0 | root   | /root          | /bin/bash
   2 | daemon | x      |   1 |     1 | daemon | /usr/sbin      | /usr/sbin/nologin
   3 | bin    | x      |   2 |     2 | bin    | /bin           | /usr/sbin/nologin
   4 | sys    | x      |   3 |     3 | sys    | /dev           | /usr/sbin/nologin
   5 | sync   | x      |   4 | 65534 | sync   | /bin           | /bin/sync
   6 | games  | x      |   5 |    60 | games  | /usr/games     | /usr/sbin/nologin
   7 | man    | x      |   6 |    12 | man    | /var/cache/man | /usr/sbin/nologin
   8 | lp     | x      |   7 |     7 | lp     | /var/spool/lpd | /usr/sbin/nologin
   9 | mail   | x      |   8 |     8 | mail   | /var/mail      | /usr/sbin/nologin
(9 rows)

推荐阅读