如何使用sql或phpPgAdmin更改PostgreSQL数据库的数据库编码?

推荐答案

简而言之,只有phpPgAdmin或SQL才能做到这一点,而不冒existing data corruption%的风险.

你应该这样做:

  1. create database dump:

    pg_dump your_database > your_database.sql

    这将以sql格式保存您的数据库,使用您当前拥有的编码.

  2. delete database(或将其重命名):

    DROP DATABASE your_database

    如果您有足够的存储空间,我建议您保留旧数据库,直到您确定新数据库一切正常为止,rename it:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. create database with new encoding:

  4. import data from dump created before:

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    您需要将psql客户机编码设置为旧数据库中的编码.

动态更改编码是不可能的,因为它需要重写大多数内部数据库数据,这几乎等同于按照我描述的方式重新创建数据库.

这是可能的,只是改变内部postgres信息的数据库和任何新的数据后,这种改变将被正确保存,但你现有的数据might get corrupted.

Postgresql相关问答推荐

如何在gorm中创建一个可读但不可写的字段

PostgreSQL\d命令:有办法只 Select 一列吗?

使函数内部动态插入更具可读性

PostgreSQL无效语法

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

为什么 Postgres 中的 now() 和 now()::timestamp 对于 CET 和 CEST 时区如此错误?

如何将 JSONB 对象数组合并为 PostgreSQL 中的单个对象

PG::UndefinedTable:错误:relation "active_storage_blobs" does not exist

如何在 PSQL 中查找从另一个表继承的子表

PostgreSQL 返回准确或最接近查询日期的日期

在postgresql中按经纬度查找最近的位置

如何使用字符串作为 PostgreSQL 咨询锁的键?

我应该同时指定 INDEX 和 UNIQUE INDEX 吗?

Postgres NOT IN (null) 没有结果

使用 pg_dump 和 psql -U postgres db_name < ... 移动数据库会导致ERROR: relation "table_name" does not exist

如何为 postgres 连接设置 application_name?

具有 DEFAULT NULL 的 MySQL 列 ?

PostgreSQL:如何在用户级别设置 search_path?

如何在 postgres 查询中排名

如何减少存储(缩减)我的 RDS 实例?