SQL 또는 PHPPGadmin을 사용하여 PostgreSQL 데이터베이스의 데이터베이스 인코딩을 변경하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/380924

  •  22-08-2019
  •  | 
  •  

문제

SQL 또는 PHPPGadmin을 사용하여 PostgreSQL 데이터베이스의 데이터베이스 인코딩을 변경하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

요컨대, 당신은 위험하지 않고 phppgadmin 또는 sql로만 이것을 할 수 없습니다. 기존 데이터 손상. 모든 데이터를 내보내고 올바른 인코딩으로 데이터베이스를 만들고 내보내는 데이터를 복원해야합니다.

이것이 당신이 진행하는 방법입니다.

  1. 데이터베이스 덤프를 만듭니다:

    pg_dump your_database > your_database.sql

    이렇게하면 데이터베이스를 현재 보유하고있는 인코딩에서 데이터베이스를 SQL 형식으로 저장합니다.

  2. 데이터베이스 삭제 (또는 이름 바꾸기) :

    DROP DATABASE your_database

    저장소가 충분하다면 모든 것이 새로 사용되도록 기존 데이터베이스를 남겨 두는 것이 좋습니다. 이름 바꾸기 그것:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. 새로운 인코딩으로 데이터베이스를 만듭니다:

    CREATE DATABASE your_database WITH ENCODING 'UNICODE' TEMPLATE=template0;

  4. 이전에 생성 된 덤프에서 데이터를 가져옵니다:

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    PSQL 클라이언트 인코딩을 이전 데이터베이스에있는 것으로 설정해야합니다.

내가 설명한 DB 방식을 재현하는 것과 거의 같은 대부분의 내부 데이터베이스 데이터를 다시 작성해야하므로 즉시 인코딩을 변경하는 것은 불가능합니다.

데이터베이스에 대한 내부 우편둥이 정보를 변경 하고이 변경 후 새로운 데이터가 올바르게 저장 될 수 있지만 기존 데이터는 가능합니다. 손상 될 수 있습니다.

다른 팁

덤프/복원없이 즉시 인코딩을 변경할 수 있습니다.

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name'

주어진 답변을 확장하려면이 명령을 사용하여 작업을 수행 할 수 있습니다.

// Backup the database to outfile
pg_dump dbname > outfile

// Terminate all connections to the database
psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='dbname';"

// Delete the database
psql -c "DROP DATABASE dbname;"

//Re-create the database using the encoding keyword
psql -c "CREATE DATABASE dbname ENCODING='UTF8';"

//Import the saved data
psql -f outfile

덤프 데이터베이스 : http://www.postgresql.org/docs/9.4/static/backup-dump.html

데이터베이스 생성 : http://www.postgresql.org/docs/9.4/static/sql-createdatabase.html

버전 9.4에 사용할 수있는 모든 인코딩 목록입니다.http://www.postgresql.org/docs/9.4/static/multibyte.html#multibyte-charset-supported

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top