如何在PostgreSQL中加载Chinook数据库?

5

Chinook数据库创建脚本在其文本字段中包含所有西方语言字符,因此我无法将它们插入到新的设置为UTF-8的PostgreSQL数据库中。

PgAdmin III也无法加载该脚本(使用SQlite则没有问题)。


一个带有UTF-8的数据库将能够存储“所有西方语言字符”。你具体遇到了什么错误?你尝试过使用psql而不是pgAdmin吗? - user330315
在创建数据库后,psql -f Chinook_PostgreSql.sql 对我起作用了。 - user330315
我的 Chinook 数据库采用 Encoding='UTF8',LC_COLLATE='en_GB_UTF-8',LC_TYPE= 同样的设置。 - hmeftah
所以我遇到了一个错误: - hmeftah
日志:数据库系统已准备好接受连接 错误:编码“UTF8”的字节序列无效:0xf4 0x6e 0x69 0x6f 错误:编码“UTF8”的字节序列无效:0xe7 0xe3 0x6f 错误:编码“UTF8”的字节序列无效:0xe1 0x75 0x64 错误:编码“UTF8”的字节序列无效:0xe3 0x6f 0x20 - hmeftah
1
SQL脚本存储在ISO-8859-1中,您需要更改您的“client_encoding”以反映这一点。 - user330315
1个回答

12
这个问题的简短回答是使用John Atten的版本,该版本可在他的github上找到here。以下是如何运行此版本的简短指南。
需要先已经安装并启动了一个PostgreSQL实例。

下载SQL脚本

官方版的Chinook脚本可以在here找到。然而,截至撰写本文时,表和列名称的标准遵循其他标准。John Atten修改了官方版本以遵循PostgreSQL标准,例如使用serial类型,并且可在here找到。这是我用于此过程的版本。

创建数据库

运行命令创建一个数据库来存储chinook数据库。为简单起见,此数据库命名为chinook。
$ createdb chinook
$

使用psql运行下载的文件

可以使用psql在新创建的数据库上运行创建代码。如果您正在操作远程数据库,请用连接字符串替换chinook。

-1选项将整个文件作为一个事务运行,确保您不会在服务器上得到部分完成的数据库。

&>errorlog.txt会将结果输出到errorlog.txt文件中。

$ psql chinook -1 -f ~/Path/To/Download/chinook_pg_serial_pk_proper_naming.sql &>errorlog.txt
$

测试数据库以确保数据已加载

现在应该检查数据是否正确加载。您可以使用PGAdmin或Postico,但也可以通过命令行使用psql的\d命令轻松检查。以下是一个示例:

再次提醒,如果远程连接,请将chinook替换为连接字符串

$ psql chinook
psql (10.1)
Type "help" for help.

chinook=# \d
                   List of relations
 Schema |              Name              |   Type   |  Owner
--------+--------------------------------+----------+----------
 public | actor                          | table    | pmitdev1
 public | actor_actor_id_seq             | sequence | pmitdev1
 public | album                          | table    | pmitdev1
 public | album_album_id_seq             | sequence | pmitdev1
 public | artist                         | table    | pmitdev1
 public | artist_artist_id_seq           | sequence | pmitdev1
 public | category                       | table    | pmitdev1
 public | category_category_id_seq       | sequence | pmitdev1
 public | customer                       | table    | pmitdev1
 public | customer_customer_id_seq       | sequence | pmitdev1
 public | employee                       | table    | pmitdev1
 public | employee_employee_id_seq       | sequence | pmitdev1
 public | film                           | table    | pmitdev1
 public | film_actor                     | table    | pmitdev1
 public | film_category                  | table    | pmitdev1
 public | film_film_id_seq               | sequence | pmitdev1
 public | genre                          | table    | pmitdev1
 public | genre_genre_id_seq             | sequence | pmitdev1
 public | invoice                        | table    | pmitdev1
 public | invoice_invoice_id_seq         | sequence | pmitdev1
 public | invoice_line                   | table    | pmitdev1
 public | invoiceline_invoiceline_id_seq | sequence | pmitdev1
 public | media_type                     | table    | pmitdev1
 public | mediatype_mediatype_id_seq     | sequence | pmitdev1
 public | playlist                       | table    | pmitdev1
 public | playlist_playlist_id_seq       | sequence | pmitdev1
 public | playlist_track                 | table    | pmitdev1
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接