Przenoszenie bazy danych PostgreSQL kończy się niepowodzeniem na znakach innych niż ascii z „zbyt długą wartością”
# Dump my database to a tar file
pg_dump -f myDatabase.tar -F t -h myServer -U myUser -W -i myDatabase
# create a new database
createdb -h myServer -U myUser -T template0 myDatabaseCopy
# restore my database
pg_restore -d myDatabaseCopy -h myServer -U myUser myDatabase.tar
Następnie otrzymuję ten błąd, a import nie powiedzie się dla całej tabeli.
psql: /home/me/myDatabase.tar: 660266: BŁĄD: wartość zbyt długa dla różnych znaków typu (100) KONTEKST: KOPIA myTable, linia 591, kolumna mojaKolumna: "Były członek projektu„ Przyszłość Iraku ”Departamentu Stanu, a teraz w Atlantyku ... ”
Te kapelusze to te irytujące kręcone pojedyncze i podwójne cytaty. Wygląda na to, że początkowo pasują do kolumny, ale gdzieś w procesie eksportowania / importowania się rozszerzają, a następnie nie mieszczą się w kolumnie zmieniającej znak (100).
Właściwie przenoszę żywą bazę danych na serwer, na którą mam niewielkie pozwolenie, więc rozwiązanie sql only byłoby świetne. Czy istnieje sposób na zrobienie czegoś takiego
UPDATE myTable SET myColumn = removeNonAscii(myColumn) WHERE hasNonAscii(myColumn)
EDIT: dostałem to. Zmieniłem
createdb -h myServer -U myUser -T template0 myDatabaseCopy
do
createdb -h myServer -U myUser -T template0 -E UTF8 myDatabaseCopy
i to załatwiło sprawę.