Как сделать латиницу в консоли postgresql

Обновлено: 04.07.2024

Вся работа с PostgreSQL осуществляется под пользователем postgres.

Работать с PosgreSQL можно как в интерактивном режиме, так и из командной строки. Программа — psql.

Основные команды PostgreSQL в интерактивном режиме:

Работа с PostgreSQL из командной строки:

  • -c (или –command) – запуск команды SQL без выхода в интерактивный режим
  • -f file.sql — выполнение команд из файла file.sql
  • -l (или –list) – выводит список доступных баз данных
  • -U (или –username) – указываем имя пользователя (например postgres)
  • -W (или –password) – приглашение на ввод пароля
  • -d dbname — подключение к БД dbname
  • -h – имя хоста (сервера)
  • -s – пошаговый режим, то есть, нужно будет подтверждать все команды
  • –S – однострочный режим, то есть, переход на новую строку будет выполнять запрос (избавляет от ; в конце конструкции SQL)
  • -V – версия PostgreSQL без входа в интерактивный режим

Примеры:

Утилиты (программы) PosgreSQL:

  • createdb и dropdb – создание и удаление базы данных (соответственно)
  • createuser и dropuser – создание и пользователя (соответственно)
  • pg_ctl – программа предназначенная для решения общих задач управления (запуск, останов, настройка параметров и т.д.)
  • postmaster – многопользовательский серверный модуль PostgreSQL (настройка уровней отладки, портов, каталогов данных)
  • initdb – создание новых кластеров PostgreSQL
  • initlocation – программа для создания каталогов для вторичного хранения баз данных
  • vacuumdb – физическое и аналитическое сопровождение БД
  • pg_dump – архивация и восстановление данных
  • pg_dumpall – резервное копирование всего кластера PostgreSQL
  • pg_restore – восстановление БД из архивов (.tar, .tar.gz)

Примеры создания резервных копий:

Создание бекапа базы mydb, в сжатом виде

Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД

Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments

Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы.

Создание резервной копии с сжатием в gz

Список наиболее часто используемых опций:

  • -h host — хост, если не указан то используется localhost или значение из переменной окружения PGHOST.
  • -p port — порт, если не указан то используется 5432 или значение из переменной окружения PGPORT.
  • -u — пользователь, если не указан то используется текущий пользователь, также значение можно указать в переменной окружения PGUSER.
  • -a, —data-only — дамп только данных, по-умолчанию сохраняются данные и схема.
  • -b — включать в дамп большие объекты (blog’и).
  • -s, —schema-only — дамп только схемы.
  • -C, —create — добавляет команду для создания БД.
  • -c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).
  • -O — не добавлять команды для установки владельца объекта (таблиц, видов и т.д.).
  • -F, —format — выходной формат дампа, custom, tar, или plain text.
  • -t, —table=TABLE — указываем определенную таблицу для дампа.
  • -v, —verbose — вывод подробной информации.
  • -D, —attribute-inserts — дамп используя команду INSERT с списком имен свойств.

Бекап всех баз данных используя команду pg_dumpall.

Восстановление таблиц из резервных копий (бэкапов):

psql — восстановление бекапов, которые хранятся в обычном текстовом файле (plain text);
pg_restore — восстановление сжатых бекапов (tar);

Восстановление всего бекапа с игнорированием ошибок

Восстановление всего бекапа с остановкой на первой ошибке

Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью CREATE DATABASE mydb; (если при создании бекапа не была указана опция -C) и восстановить

Admin 04.10.2020 , обновлено: 05.11.2021 PostgreSQL

Немного более подробно о кодировках в реляционной базе данных PostgreSQL.

Базы данных по умолчанию

Если мы только установили PostgreSQL, то там увидим такой список баз данных (List of databases):

В зависимости от установленной операционной системы в колонках encoding, collate и ctype можно увидеть разные кодировки.

Пока нас интересуют названия баз данных: template1 и template0.

Эти базы данных являются шаблонами для создания новых баз данных. Другими словами: по образу и подобию их будут созданы позже другие базы данных.

template0 — это шаблон базы данных с первоначальными настройками. Эту БД стоит оставить такой какая она есть.

template1 — этот шаблон используется по умолчанию при создании новых баз данных. Здесь мы можем менять атрибуты, которые потом будут заимствованы для новых баз данных созданных по этому шаблону.

Проблема кодировок

Различия в кодировках

Для того чтобы мигрировать данные с локальной базы данных на базу данных на сервере или наоборот кодировки должны быть одинаковыми. В противном случае ошибка будет примерно такого плана:

Разная сортировка в одинаковых кодировках

Даже если кодировки одинаковые, это всё равно может приводить к отличным результатам при сортировке. Автор по ссылке выше утверждает, что кодировка lc_collate = C решает эти проблемы.

Меняем кодировки LATIN1 на UTF8

Сначала разберем пару ошибок, которые могут возникать в процессе.

Эта ошибка возникнет, если пропустить первую команду и сразу попробовать переключиться на базу данных template0:

У следующей ошибки сложная история, но её избежим, когда принудительно укажем значения в LC_CTYPE и LC_COLLATE.

Теперь определим несколько базовых понятий.

LC_COLLATE — порядок сортировки строк
LC_CTYPE — классификация символов

update pg_database set datallowconn = TRUE where datname = 'template0' ;
UPDATE 1

\c template0
You are now connected to database "template0" .

update pg_database set datistemplate = FALSE where datname = 'template1' ;
UPDATE 1

drop database template1;
DROP DATABASE

При создании таблицы делаем её с кодировкой UTF8 и сортировкой C.

Важно для русской кириллицы, чтобы корректно работал поиск по базе данных, создавать такую:

CREATE DATABASE dbname TEMPLATE =template0 ENCODING 'UTF-8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' ;

Вариант без указания языка:

Или с en_US.UTF-8:

CREATE DATABASE dbname WITH template = template0 ENCODING 'UTF8' LC_CTYPE 'en_US.UTF-8' LC_COLLATE 'en_US.UTF-8' ;

Продолжаем выполнять команды:

update pg_database set datistemplate = TRUE where datname = 'template1' ;
UPDATE 1

\c template1
You are now connected to database "template1" .

update pg_database set datallowconn = FALSE where datname = 'template0' ;
UPDATE 1

Теперь когда мы будем создавать таблицы они сразу будут у нас в нужной кодировке.

Альтернативный вариант

CREATE DATABASE ploshadka_db_1 WITH owner =ploshadka ENCODING = 'UTF-8' lc_collate = 'C' lc_ctype = 'C' template template0;

Результат будет таким же, как и в случае, если мы поменяли локаль у таблицы template1 и далее вне сеанса psql ввели команду:

Тут можно заметить что пользователь postgres, а не ploshadka, но это легко поправимо, если создавать с указанием пользователя:

Альтернативный вариант всем вариантам

Проблема с кодировками могла и не возникать, если до установки PostgreSQL в самой системе заранее указать нужную кодировку — изменение локали на сервере.

Кстати, на сайте нет рекламы. У сайта нет цели самоокупаться, но если вам пригодилась информация можете задонатить мне на чашечку кофе в макдаке. Лайкнуть страницу или просто поблагодарить. Карма вам зачтется.

Использование PostgreSQL при подключении к db с помощью \c testdb внутри SQL-запроса PostgreSQL SQL. Я успешно подключаюсь к db, но получаю следующее предупреждение:

Что означает это предупреждение? Как его решить?

ОТВЕТЫ

Ответ 1

Таким образом, чтобы удалить это предупреждение, вам нужно выполнить chcp 1252 перед chcp 1252 psql . Использование chcp без параметров дает вам текущую кодовую страницу.

Ответ 2

Чтобы сделать это еще более очевидным, файл, к которому @user3423801 добавляет строку

находится в каталоге scripts , где вы установили Postgre.

Например, в моем случае это

Ответ 3

Или вы можете просто ввести cmd.exe /c chcp 1252 в окне командной строки.

Ответ 4

Кодовая страница по умолчанию для CMD.exe отличается от значения по умолчанию для postgres. Для изменения для CMD.exe с помощью REGISTRY попробуйте следующее:

  • Пуск → Выполнить → regedit
  • Перейдите к [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor]
  • Добавьте новое строковое значение с именем "Autorun" со значением "chcp 1252"

Затем снова запустите CMD.exe

Ответ 5

Ответ dvdgsng верен, но пример кода более явно.

Ответ 6

Откройте cmd.exe и запустите regedit .

Перейдите на Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

Новое строковое значение с именем: Autorun и измените значение на chcp 1252

Ответ 7

Я не мог понять, как установить его для Cygwin во всем мире. Похоже, это работает в моем скрипте bash

Ответ 8

После многократного поиска ответа, который имел для меня смысл, я нашел эту справочную цепочку электронной почты на сайте PostgreSQL, который в основном говорит, что нужно запустить chcp 1252 из открытого командного окна. Затем я смог запустить мои команды PostgreSQL без предупреждения кода.

ПРИМЕЧАНИЕ. Это изменение не сохраняется, поэтому вы должны запускать его каждый раз, когда вы открываете новое окно команд, в котором вы планируете использовать команды PostgreSQL.

Ответ 9

Для Postgres 11

Если вы не являетесь администратором на своем компьютере, добавьте строку "chcp 1252" в скрипт pg_env.bat, который находится в базовом каталоге вашей установки postgres. ' т.е. "C:\Program Files\PostgreSQL\11"

Если вы являетесь администратором на своем компьютере, вы можете изменить реестр, чтобы он запускал строку при каждом запуске "cmd.exe", как указано выше.

Ответ 10

git bash не может самостоятельно расширить chcp до полного исполняемого файла, поэтому вам нужно ввести полную команду.

Для подключения к базе данных PostgreSQL понадобится установленный PostgreSQL клиент:

Для установки PostgreSQL сервера:

Проверим, можем ли мы подключиться к базе данных PostgreSQL:

Вывод команды должен быть примерно таким:

PostgreSQL Подключение, Пользователи (Роли) и Базы Данных

Логин в только что установленный postgreSQL сервер нужно производить под именем пользователя postgres:

Для подключения к базе данных PostgreSQL можно использовать команду:

Если такая команда не просит ввести пароль пользователя, то можно еще добавить опцию -W.

После ввода пароля и успешного подключения к базе данных PostgreSQL, можно посылать SQL-запросы и psql-команды.

PostgreSQL создание новой роли и базы данных

Создать новую роль c именем admin (указывайте нужное имя):

Создание новой базы данных:

Дать права роли на базу данных:

Включить удаленный PostgreSQL доступ для пользователей

Нам нужно отредактировать файл /etc/postgresql/ /main/pg_hba.conf, задав опцию md5 вместо peer.

может быть 10, 11, 12 и т.д.

После этого сделать restart PostgreSQL:

Полезные команды PostgreSQL

Выйти из клиента PostgreSQL:

\q

Показать список баз данных PostgreSQL:

\l

Показать список таблиц:

\dt

Показать список пользователей (ролей):

\du

Показать структуру таблицы:

Переименовать базу данных:

Удалить базу данных:

Изменить текущую базу данных в PostgreSQL (вы не сможете переименовать или удалить текущую базу данных):

\connect db_name или более короткий alias: \c db_name

Удалить роль (пользователя):

Роль не будет удалена, если у нее есть привелегии - возникнет ошибка ERROR: role cannot be dropped because some objects depend on it .

Нужно удалить привелегии у роли, например если нужно удалить роль admin2, нужно выполнить последовательность комманд с Drop Owned:

Дать права пользователю/роли на логин ( role is not permitted to log in ):

Выбор shema psql в консоли:

Посмотреть список всех схем:

Подключиться к конкретной схеме:

Sequences

Получить имена всех созданных sequences:

Получить последнее значение sequence, которые будет присвоено новой вставляемой в таблицу записи:

Читайте также: