Postgresql data recovery encoding - windows

I can't recover a database script.
I have followed different posts and this is what I've done so far to solve this:
1- dump UTF-8 old database to LATIN9:
"C:\Program Files (x86)\pgAdmin III\1.22\pg_dump" -E LATIN9 --no-owner --no-acl -U postgres -W -h localhost -p 5432 database_name > database_name.sql
2- Remove the old database
DROP DATABASE database_name;
3- Create the new database as LATIN9:
CREATE DATABASE "database_name" WITH ENCODING='LATIN9' OWNER=username TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1;
4- I try to recover the LATIN9 script created in the first step with the next command:
"C:\Program Files (x86)\pgAdmin III\1.22\psql.exe" -U username-d database_name -f database_name.sql
And then I get the error message:
psql: FATAL: conversion between WIN1252 and LATIN9 is not supported
I don't understand, the script is already LATIN9!!! What's going on?
I want to add that what I'm trying to archive with this is to change my current UTF-8 database to LATIN9.

To make it work I changed the steps 1 and 4.
This are all the steps with the corrections:
1-
"C:\Program Files (x86)\pgAdmin III\1.22\pg_dump" --host localhost --port 5432 --username "postgres" --role "postgres" --no-password --format tar --blobs --encoding LATIN9 --verbose --file "database_name.backup" "database_name"
2-
DROP DATABASE database_name;
3-
CREATE DATABASE "database_name" WITH ENCODING='LATIN9' OWNER=username TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1;
4-
"C:\Program Files (x86)\pgAdmin III\1.22\pg_restore" --host localhost --port 5432 --username "postgres" --dbname "database_name" --role "postgres" --no-password --verbose "database_name.backup"

Related

pg_restore ignores .pgpass and PGPASSWORD environment variable

I want to import a backup using pg_restore without a password prompt.
I tried several options but after I run the script it will always ask for a password. pg_dump is working but not pg_restore. I can run the pg_restore command if I enter my password but I want a passwordless command or at least I don't want to enter my password because the script has to work without user interaction.
What is working for me:
PGPASSWORD=xyz pg_dump -h localhost -U user -Fc database > ~/dump_prod.pgsql
What is NOT working
1.)
PGPASSWORD=xyz pg_restore -h localhost -d database -U user -W --clean --no-owner ~/dump_prod.pgsql
2.)
pg_restore --dbname=postgresql://user:pass#localhost:5432/db -W --clean --no-owner ~/dump_prod.pgsql
3.)
touch ~/.pgpass
echo "*:*:*:*:password > ~/.pgpass
chmod 0600 ~/.pgpass
pg_restore -h localhost -d db -U user -W --clean --no-owner ~/dump_prod.pgsql
any ideas?
Regards
As per the doc, -W will prompt for a password. -w will not
-w
--no-password
Never issue a password prompt. If the server requires password authentication and a password is not available by other means such as
a .pgpass file, the connection attempt will fail. This option can be
useful in batch jobs and scripts where no user is present to enter a
password.
-W
--password
Force pg_restore to prompt for a password before connecting to a database.
The .pgpass file worked for me.
My setup:
I am restoring DB into the postgres instance running as Docker container.
The postgres instance is run using command:
docker run --name postgres_db -p 5432:5432 -e POSTGRES_PASSWORD=admin -d postgres:9.6
pg_restore is present but it is available as separate tool, outside docker setup.
The ~/.pgpass file entry looks like this:
localhost:5432:db_name:user:password
Where:
db_name is the target db name that one is going to restore.
user is the name of the user that is going to perform the restore - in my case an admin user. i.e. postgres user in the postgres instance.
password - admin user's password. i.e. admin

Run postgres query from another server, in bash

I have a Ubuntu server that processes documents and another that have the database (postgresql 9.3).
I ran psql -? to understand how to connect to another DB and the final command would be:
psql -U postgres -W -h 1.2.3.4 -d testdb -p 5432
It works, but I must type the password after the command is issued.
I was trying to adapt this command in a bash script:
#!/bin/bash
psql -U postgres -W mypassword -h 1.2.3.4 -d testdb -p 5432 << EOF
select * from mytable;
\q
EOF
Needless to say this is not the right command.
Also, the password does not get recognized as a password, reporting the error:
psql: warning: extra command-line argument "mypassword" ignored
Password for user postgres:
psql: FATAL: password authentication failed for user "postgres"
FATAL: password authentication failed for user "postgres"
In another server, where the script runs on the local DB, my working script is:
su - postgres -c "psql myDatabase" << EOF
select * from "myOtherTable";
\q
EOF
The question is simple, how can I write the right command for bash, to connect to another database with user/password and issue commands?
A link I tried, but password seems to not be set:
run psql query in bash
Thanks!
Try
PGPASSWORD=yourpass psql -U postgres -W -h 1.2.3.4 -d testdb -p 5432
See: https://www.postgresql.org/docs/9.3/static/libpq-envars.html
or ~/.pgpass file https://www.postgresql.org/docs/9.3/static/libpq-pgpass.html

Slimming down psql calls in database config creation

I currently have the following calls to psql to setup my PostgreSQL database. I'd like to slim this down as each time I have to input a password for every call. I haven't had much experience with psql so am not too sure about the best way to do all of the following in a shorter, more user friendly fashion.
Thanks.
# Create DB
psql -U postgres -h 127.0.0.1 -c "CREATE DATABASE \"main\" WITH OWNER maindb;"
# PostGIS setup
psql -U postgres --dbname main -h 127.0.0.1 -c "CREATE EXTENSION postgis;CREATE EXTENSION postgis_topology;CREATE EXTENSION fuzzystrmatch;CREATE EXTENSION postgis_tiger_geocoder;"
# Create users table
psql -U maindb --dbname main -h 127.0.0.1 -a -f ../lib/sql/Users.sql
# Create interests table
psql -U maindb --dbname main -h 127.0.0.1 -a -f ../lib/sql/Interests.sql
# Create user-interests table
psql -U maindb --dbname main -h 127.0.0.1 -a -f ../lib/sql/UserInterests.sql
each time I have to input a password for every call
Solve this part by using a .pgpass file. Then you can make as many calls to psql as you want.

postgres pg_restore pbl with windows shell mode

The following
"C:\Program Files (x86)\pgAdmin III\1.14\pg_restore.exe" --host localhost --port 5432 --username "postgres" --password "postgres" --dbname "base_nationale" --verbose "E:\dump\ff_d01_2011.dump"
gives this error message:
pg_restore: too many command-line arguments (first is "--host"
why it doesn't fuctionne?
You can't specify a value for --password. That switch only forces a password prompt and should actually never be needed.
Just remove the part --password "postgres". If a password is needed, pg_restore will automatically prompt you for it.
If you want to run that command without a password prompt, you need a .pgpass file or use the environment variable PGPASS
Details are in the manual:
http://www.postgresql.org/docs/current/static/libpq-envars.html
http://www.postgresql.org/docs/current/static/libpq-pgpass.html
Or this SO question: How do I specify a password to psql non-interactively?

How to backup/restore standalone heroku postgres database?

Is there a Heroku way to backup / restore a standalone postgres database at https://postgres.heroku.com/ apart from using pg_dump / pg_restore ? The database is not attached to any app.
I can create a dump using
pg_dump --verbose -F c -b -h hostname -p port -U username -f "backup.dump" database_name
and restore it using
pg_restore --verbose --clean --no-acl --no-owner -h hostname -p port -U username -d database_name "backup.dump"
Looks when you create a new database, heroku automatically creates an app for you. Check it with heroku list So you can restore using the empty app.
heroku pgbackups:restore DATABASE 'dumped-db-secure-url' --app heroku-postgres-xxx

Resources