如何在PostgreSQL 8.4中导入现有的* .sql文件?


105

我正在使用PostgreSQL 8.4,并且我有一些* .sql文件要导入数据库。我该怎么办?

Answers:


142

从命令行:

psql -f 1.sql
psql -f 2.sql

psql提示下:

\i 1.sql
\i 2.sql

请注意,您可能需要以特定顺序导入文件(例如:数据操作之前的数据定义)。如果您拥有bashshell(GNU / Linux,Mac OS X,Cygwin)并且文件可以按字母顺序导入,则可以使用以下命令:

for f in *.sql ; do psql -f $f ; done

这是psql应用程序的文档(感谢Frank):http : //www.postgresql.org/docs/current/static/app-psql.html


@moon也许您无权访问SQL文件?您在什么操作系统上?
Bolo 2010年

@moon这是与PostgreSQL用户关联的密码(用户密码对存储在PostgreSQL中)。
Bolo 2010年

8
@moon我建议您将问题分为三个阶段:1)确保可以开始psql运行。2)请确保您的用户具有必需的写权限,如:CREATEINSERTUPDATE等3)导入SQL文件。据我了解,您现在处于第一阶段。
Bolo 2010年

@Bolo:您是否将三个阶段纳入答案?
AH

@Bolo,正如您提到的,我现在处于第三步。但是如何从本地计算机导入.sql文件。我尝试使用\ i [具有扩展名的完整路径],但收到错误消息.sql,没有此类文件或目录。你能举个例子吗?

75

在命令行中,首先到达存在psql的目录,然后编写如下命令:

psql [database name] [username]

然后按回车psql要求输入密码输入用户密码:

然后写

> \i [full path and file name with extension]

然后按Enter键完成插入。


我也用这个 而且有效。但是,我更改了提供的SQL语句。以前现有的* .sql不使用任何字符; 作为一条线的终点。而且我还必须删除GO。您是否认为sql脚本不是psql脚本?
swdev

我尝试使用\ i [具有扩展名的完整路径],但收到错误消息.sql,没有此类文件或目录。您能否上传一个例子。谢谢。

如果\ i说没有这样的文件,则它在该位置找不到文件。最好提供绝对URL。对于Windows上的我来说,此命令行有效:\ i /tmp/robert/test.sql当然,您在该文件中必须具有有效的SQL命令。
shevy 2014年

36

好吧,我所知道的最短的方法是:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

database_name:您应该在其中插入文件数据的数据库。

file_path:要通过其执行导入的文件的绝对路径。

host_name:主机名。出于开发目的,它主要是localhost

在控制台中输入此命令后,将提示您输入密码。


25

注意“ /”和“ \”。即使在Windows上,命令也应采用以下格式:

\i c:/1.sql

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.