windows 安装postgresql 14
开源数据库 PostgreSQL 是 1980 年以加利福尼亚大学为中心开发出来的 DBMS,与 MySQL 一样,都是世界上广泛应用的开源数据库(DB)。
本文将会介绍使用 64 位版的 Windows 安装程序(Win x86-64)在 Windows Server 2019(64 位)系统中安装 PostgreSQL 的步骤,请大家结合自身实际下载相应的安装程序。
数据库安装包下载地址:Download PostgreSQL (enterprisedb.com)
运行安装程序的时候,鼠标右键点击安装文件,然后选择“以管理员身份运行”,默认的安装路径是“C:\Program Files\PostgreSQL\14”,选择数据保存路径的,默认路径“C:\PostgreSQL\14\data” ,我们改到了F:\pgdata.
在接下来的数据库管理员密码设置画面中输入任意密码,点击“Next >”按钮。登录 PostgreSQL 时会用到这个密码,请大家务必牢记。 接下来会出现端口号设置画面,无需修改,保持默认的5432,直接点击“Next >”按钮。通常情况下保持默认选项即可。
接下来是 PostgreSQL 地区设置画面。选择默认值,有一次改成了“Chinese(Simplified),Singapore”,出现了下面的错误页面。
安装完成的时候出现了如下画面:
只好手工来完成最后一步:
- 切换到安装目录下的bin目录
- 管理员权限执行initdb "F:\pgdata"
- 如果服务未自动启动,使用pg_ctl start -D "F:\pgdata"启动服务
- 创建用户cmd执行createuser -s -r postgres
使用安装时设置的管理员密码登陆pgadmin(安装路径下/pgAdmin 4/bin/pgAdmin4.exe)
ERROR: character with byte sequence 0xe5 0x91 0xa8 in encoding "UTF8" has noequivalent in encoding"WIN1252"
通过修改PostgreSQL配置文件,在运行日志(不是WAL和提交日志)中输出SQL语句执行情况,可以准确定位到哪个表会引发错误。具体方法是:
- 修改配置文件postgresql.conf,通常在$pgdata目录下,本例中是在F:\pgdata目录;
- 找到“where to log”块,将logging_collector设置为on,这意味着开启运行日志,所在目录由log_directory参数指定;
- 找到“what to log”块,将log_statement设置为mod或all,这意味着sql语句被记录到运行日志;
- 仍在“when to log”块,确保log_min_error_statement为error或更低级别,以记录错误信息;因缺省值已是error,一般无须修改;
- 仍在“when to log”块,确保log_min_message为info或更低级别,这样成功执行的sql语句所绑定的变量也能查到(可选);
- 重启PostgreSQL,执行那个导入程序,此时运行日志已记录下执行的sql语句情况,根据报错信息即可具体定位是哪个表引起。
日志里看到如下的sql:
2022-12-22 08:19:23.510 UTC [1888] ERROR: character with byte sequence 0xe5 0x91 0xa8 in encoding "UTF8" has no equivalent in encoding "WIN1252" 2022-12-22 08:19:23.510 UTC [1888] STATEMENT: /*pga4dash*/ SELECT pid, datname, usename, application_name, client_addr, pg_catalog.to_char(backend_start, 'YYYY-MM-DD HH24:MI:SS TZ') AS backend_start, state, wait_event_type || ': ' || wait_event AS wait_event, pg_catalog.pg_blocking_pids(pid) AS blocking_pids, query, pg_catalog.to_char(state_change, 'YYYY-MM-DD HH24:MI:SS TZ') AS state_change, pg_catalog.to_char(query_start, 'YYYY-MM-DD HH24:MI:SS TZ') AS query_start, pg_catalog.to_char(xact_start, 'YYYY-MM-DD HH24:MI:SS TZ') AS xact_start, backend_type, CASE WHEN state = 'active' THEN ROUND((extract(epoch from now() - query_start) / 60)::numeric, 2) ELSE 0 END AS active_since FROM pg_catalog.pg_stat_activity WHERE datname = (SELECT datname FROM pg_catalog.pg_database WHERE oid = 13754)ORDER BY pid
上面这个问题的原因在postgrsql 里是一个普遍的问题,由于客户端和服务器的编码不对。
相关文章
- 【MySQL】深入分析 锁机制(一)行锁 加锁规则 之 等值查询
- MYSQL数据库-索引
- MYSQL数据库-复合查询
- MYSQL数据库-内外连接
- [android] 安卓消息推送的几种实现方式
- [android] 安卓进程优先级&为什么使用服务
- MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨
- [android] 安卓自定义样式和主题
- [javaEE] 开源数据库连接池
- [javaEE] 数据库连接池和动态代理
- [android] 安卓消息推送的几种实现方式
- [android] 安卓进程优先级&为什么使用服务
- Mysql join left查询无法命中索引一例
- 2022-12-11:行程和用户。以下为输出结果,请问sql语句如何写? +------------+-------------------+ | Day |
- Valentina Studio Pro mac/win(数据库管理器)最新版
- 10个人9个答错,另外1个只对一半:数据库的锁,到底锁的是什么?
- (一)Mysql基础
- (二)Mysql基本操作
- (三)SQL语言基础
- (五)SQL运算符