我有一个名为:nyummy的数据库模式和一个名为cimory的表:

create table nyummy.cimory (
  id numeric(10,0) not null,
  name character varying(60) not null,
  city character varying(50) not null,
  CONSTRAINT cimory_pkey PRIMARY KEY (id)
);

我想将cimory表的数据导出为插入SQL脚本文件。但是,我只想导出城市等于“tokyo”的记录/数据(假设城市数据都是小写的)。

怎么做呢?

解决方案是使用免费的GUI工具还是命令行并不重要(尽管GUI工具解决方案更好)。我尝试过pgAdmin III,但我找不到这样做的选项。


当前回答

只是添加上一种简单的方式,但手工方法。

1)使用PGADMIN 4,查询数据后,下载csv格式的数据。

在任何记事本中打开CSV,并在在线CSV到SQL转换器中复制和粘贴数据。例如:https://www.convertcsv.com/csv-to-sql.htm。 可以设置目标表的名称。输出是sql insert scripts。 将INSERT脚本复制回目标db查询窗口中的PGADMIN4。

其他回答

SQL Workbench有这样一个特性。

运行查询后,右键单击查询结果并选择“Copy Data As SQL > SQL Insert”

只是添加上一种简单的方式,但手工方法。

1)使用PGADMIN 4,查询数据后,下载csv格式的数据。

在任何记事本中打开CSV,并在在线CSV到SQL转换器中复制和粘贴数据。例如:https://www.convertcsv.com/csv-to-sql.htm。 可以设置目标表的名称。输出是sql insert scripts。 将INSERT脚本复制回目标db查询窗口中的PGADMIN4。

只能使用COPY命令导出数据:

COPY (SELECT * FROM nyummy.cimory WHERE city = 'tokio') TO '/path/to/file.csv';

您可以导出整个表,只导出选定的列,或者如所示导出查询结果。不需要显式地创建表。

您将获得一个纯文本格式的文件,其中每行有一个表(而不是INSERT命令)。比INSERT命令更小更快。

要将相同的表导入到匹配结构的另一个Postgres表中(列顺序相同,数据类型兼容!):

COPY other_tbl FROM '/path/to/file.csv';

COPY在服务器本地读写文件,不像pg_dump或psql这样的客户端程序在客户端本地读写文件。如果两者都运行在同一台机器上,这并不重要,但对于远程连接来说却很重要。

还有psql的\copy命令:

执行前端(客户端)复制。这是一个运行 SQL COPY命令,但不是服务器读取或 写入指定的文件,PSQL读取或写入文件并进行路由 服务器与本地文件系统之间的数据。这意味着 文件可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要SQL超级用户权限。

语法与上面相同。只需将COPY替换为\ COPY。

您可以查看表与指定的记录,然后转储sql文件

CREATE VIEW foo AS
SELECT id,name,city FROM nyummy.cimory WHERE city = 'tokyo'

我需要一种不需要创建临时表(在生产环境中)就可以生成插入语句的方法。我确实看到了上面的pg_dump的一些有用的参数,但最终还是设计了一种方法

生成插入语句并转储到文件中

下面的陈述很有用,我觉得对那些在这里找到类似答案的人会很有用。

$ /usr/local/bin/pg_dump -h the_db_host_address -d the_db_name --table=schema_name.table_name --data-only --column-inserts -U postgres -p the_port_number -v -f /Users/the_user/folder_name/insrt_stmts_file_name.sql

下一件事是一个提示,要求密码,在上面的情况下,我提供了postgres密码,但任何其他用户应该工作良好,具有读取能力。

我运行了文件中的插入语句: insrt_stmts_file_name。在DBeaver客户端执行sql命令。

但同样可以从命令提示符运行,使用以下脚本:

/usr/local/bin/psql -h the_db_host_address -d the_db_name -v -U postgres -f /Users/the_user/folder_name/insrt_stmts_file_name.sql

pg_dump / psql标志的引用: -h = host -d = db name -v = verbose(它会随着进程输出) -U = db用户名 -f =文件/路径