Ошибки Postgres
Ошибки
psql command not found
Вы хотите запустить Postgres скрипт из bash
andrey@olegovich-10:/mnt/c/Users/olegovich$ psql -h localhost -p 5432 -U andrei
но получаете эту ошибку
-bash: psql: command not found
Это значит, что путь до Postgres не прописан в $PATH
Чтобы узнать, что прописано в $PATH достаточно сделать
echo $PATH
/home/andrei/bin:/home/andrei/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath_target_1128437:/mnt/c/ProgramData/Oracle/Java/javapath_target_5252250:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Program Files/OpenVPN/bin:/mnt/c/Program Files (x86)/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/Tools/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/DTS/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/Tools/Binn/ManagementStudio:/mnt/c/Program Files/MiKTeX 2.9/miktex/bin/x64:/mnt/c/Users/andreyolegovich_ru/Documents/Software/axis2-1.6.2:/mnt/c/Users/andreyolegovich_ru/Documents/Software/axis2-1.6.2/bin:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn:/mnt/c/Program Files/Microsoft SQL Server/140/Tools/Binn:/mnt/c/Program Files/Microsoft SQL Server/140/DTS/Binn:/mnt/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/TortoiseGit/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/nodejs:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/Program Files/PuTTY:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Library/mingw-w64/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Library/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Scripts:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36/Scripts:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/andreyolegovich_ru/AppData/Local/atom/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36-32:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36-32/Scripts:/mnt/c/Program Files (x86)/Nmap:/mnt/c/Program Files (x86)/Mozilla Firefox:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Fiddler:/mnt/c/Program Files/JetBrains/PyCharm Community Edition 2018.3.2/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Roaming/npm:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin
ERROR: character with byte sequence 0xd0 0x9a in encoding "UTF8"
has no equivalent in encoding "WIN1252"
Скорее всего Вы создали базу данных, и даже смогли туда что-то импортировать, например, из .csv файла.
Но сделать SELECT * FROM table; уже не получается, потому что кодировка базы и кодировка файла не совпадают.
Возможно, Вы уже попробовали явно указать SET CLIENT_ENCODING TO 'utf8'; при импорте файла. Но так как кодировка WIN1252
- это кодировка БД, способ не сработал.
Нужно привести файл и БД к одной кодировке - пересоздайте БД в utf8, например.
Как проверить кодировки я писал выше -
Проверка кодировок БД
Как указать кодировку при создании БД -
Создание БД
ERROR: database "db" is being accessed by other users
Если Вы делаете DROP DATABASE db; и получаете
ERROR: database "db" is being accessed by other users
DETAIL: There are 2 other sessions using the database.
Значит где-то ещё не закрыто подключение к БД. Например, Вы открывали её через pgAdmin.
Нужно найти это подключение и закрыть
FATAL password authentication failed for user postgres
Если вы логинитесь в pgAdmin, но не помните пароль - его можно поменять через терминал
sudo su - postgres
psql
postgres=# ALTER USER postgres PASSWORD 'новый_пароль';
ALTER ROLE
ERROR: could not open file "/home/user…" for reading: Permission denied
Если вы пытаетесь прочитать из файла, а получаете
ERROR: could not open file "/home/user/file.csv" for reading: Permission denied HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy. SQL state: 42501
Значит у postgres недостаточно прав для чтения из файла. Простое добавление прав на чтение вроде
chmod +r file.csv
Проблему, скорее всего, не решит.
Как вариант - предлагаю переместить нужный файл в директорию /tmp
cp /home/user/file.csv /tmp
ERROR: COPY quote must be a single one-byte character
Если вы пытаетесь прочитать из файла, а получаете
ERROR: COPY quote must be a single one-byte character
SQL state: 0A000
Скорее всего присутствует какой-то лишний символ в QUOTE, например
QUOTE '\"'
Замените на
QUOTE '"'
ERROR: date/time field value out of range
Если вы пытаетесь прочитать из .csv файла, а получаете
ERROR: date/time field value out of range: "" HINT: Perhaps you need a different "datestyle" setting. CONTEXT: "" SQL state: 22008
Скорее всего ваш текущий datestyle не совпадает с тем, который используется в .csv файле.
datestyle - это порядок записи даты. Может быть День - Месяц - Год (DDMMYYYY), Год - Месяц - День (YYYYMMDD) или,
например американский стиль Месяц - День - Год (MMDDYYYY)
Это всё актуально если тип столбца указан как дата date. Можно изменить тип на char тогда datestyle уже не нужно настраивать.
Стилей много и если они не совпадают - получается что месяц принимает значение больше 12.
Как вариант - можно перед выполнение скрипта временно изменить свой datestyle.
Например, если нужно импортировать данные из .csv с американским стилем - перед импортом добавьте
set datestyle to "US";
psql: could not connect to server: No such file or directory
Если вы выполнили
psql
И получили ошибку
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Очень часто данная ошибка возникает вследствии того, что не была инициализирована база
данных.
Выполните
postgresql-setup initdb
Initializing database ... OK
Подробнее про инициализацию базы данных PostgreSQL на примере для
CentOS Linux
читайте в статье
«Установка PostgreSQL в CentOS»
pg_basebackup: could not connect to server: could not connect to server: No route to host
Если вы пытаетесь сделать реплику
pg_basebackup -h 192.168.56.109 -U repluser -D /var/lib/pgsql/data --xlog-method=stream
pg_basebackup: could not connect to server: could not connect to server: No route to host Is the server running on host "192.168.56.109" and accepting TCP/IP connections on port 5432?
На мастере
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
success
sudo firewall-cmd --reload
success
sudo firewall-cmd --list-ports
3389/tcp 5432/tcp
Failed to stop postgresql.service: Unit postgresql.service not loaded
Причин может быть много но среди новичков самая распространённая - попытка остановить postgresql
из под пользователя postges
Например, в моём терминале я по приглашению bash-4.2$ вижу, что зашёл как postgres
Нужно выполнить
exit
Приглашение изменится на
[andrei@localhost ~]$
И затем уже можно останавливать сервер
sudo systemctl stop postgresql
sudo systemctl status postgresql
● postgresql.service - PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled) Active: inactive (dead) Jun 09 12:20:24 localhost.localdomain systemd[1]: Unit postgresql.service entered failed state. Jun 09 12:20:24 localhost.localdomain systemd[1]: postgresql.service failed. Jun 09 12:21:59 localhost.localdomain systemd[1]: Starting PostgreSQL database server... Jun 09 12:22:00 localhost.localdomain systemd[1]: Started PostgreSQL database server. Jun 10 19:10:02 localhost.localdomain systemd[1]: Stopping PostgreSQL database server... Jun 10 19:10:03 localhost.localdomain systemd[1]: Stopped PostgreSQL database server. Jun 10 22:14:18 localhost.localdomain systemd[1]: Starting PostgreSQL database server... Jun 10 22:14:19 localhost.localdomain systemd[1]: Started PostgreSQL database server. Jun 11 10:11:15 localhost.localdomain systemd[1]: Stopping PostgreSQL database server... Jun 11 10:11:16 localhost.localdomain systemd[1]: Stopped PostgreSQL database server.
ERROR: WAL level not sufficient for making an online backup
Вы хотите настроить онлайн бэкап, например с помощью команды
-bash-4.2$ psql -c "SELECT pg_start_backup('replbackup');"
Но получаете ошибку
ERROR: WAL level not sufficient for making an online backup
HINT: wal_level must be set to "archive" or "hot_standby" at server start.
Нужно узнать расположение конфигурационного файла postgresql.conf
-bash-4.2$ su - postgres -c "psql -c 'SHOW config_file;'"
Password: config_file ------------------------------------- /var/lib/pgsql/data/postgresql.conf (1 row)
vi /var/lib/pgsql/data/postgresql.conf
Нужно установить wal_level = hot_standby
NOTICE: WAL archiving is not enabled
Вы заканчиваете бэкап, например с помощью команды
psql -c "SELECT pg_stop_backup();"
Но получаете предупреждение
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup