What is JDBC counterpart of Postgres' "\connect" command? - postgresql

I'm trying to execute following Postgres 9.6 commands over JDBC connection
CREATE USER my_db WITH SUPERUSER PASSWORD 'my_db';
CREATE DATABASE my_db;
GRANT ALL PRIVILEGES ON DATABASE my_db TO my_db;
\connect my_db; -- THIS ONE FAILS
SET ROLE my_db;
CREATE SCHEMA my_db AUTHORIZATION my_db;
"\connect" command fails as not recognized. Is there way to connect other database staying within the same JDBC connection?
UPD: "CONNECT TO ..." and "EXEC SQL CONNECT TO ..." also fail.

Backslash commands are not PostgreSQL SQL commands, they're commands in the psql command-line utility. Behind the scenes, \connect just closes the connection and opens a new one.
PostgreSQL its self does not have any way to switch databases on a connection.
Disconnect and reconnect to the other DB.

Related

Switch between databases in PGAdmin4

How we can connect to specific database by using sql commands in pgadmin4 postgresql
in psql command line,its already working \c database name,same thing we want to connect to specific database in pgadmin4 postgresql
The pgadmin4 SQL window executes only SQL commands, which are bound to a specific database. \c is an internal psql command.
You need to open separate SQL windows per database in pgadmin4.

How can I create a Postgres 11 user/role with a different name than the OS-user?

I'm a newbie to PostgreSQL and I'm trying to create a user/role on Postgres 11 (running on CentOS7) which is named (e.g.) "json_docs_admin" (same for password) that I can use under the OS user (e.g.) "app_user" to connect locally to the DB.
I have tried connecting to Postgres using "postgres" user and the command "psql -d template1" and ran the following commands:
template1=# create role json_docs_admin with login password 'json_docs_admin';
CREATE ROLE
template1=# create database json_docs owner=json_docs_admin;
CREATE DATABASE
template1=# GRANT ALL PRIVILEGES ON DATABASE json_docs TO json_docs_admin;
GRANT
I have changed the /var/lib/pgsql/11/data/pg_hba.conf so that local connections can be established on the server, and I've restarted the postgresql service.
Then, back under "app_user" user, when I try to connect to the database, I get the following errors:
$psql -d json_docs -U json_docs_admin
Password for user json_docs_admin:
psql: FATAL: database "json_docs" does not exist
Could anybody let me know what am I doing wrong?
Thanks.

Recover postgres user in PostgreSQL

I need to recover the superuser privilege for the postgres user, because it lost the superuser qualification.
I cannot do anything in the psql shell, it gives the message
must be superuser to create superusers
The system is Ubuntu 16.04 and PostgreSQL 9.5.
Can I recover this postgres user?
If you managed to remove superuser privileges from all your users, you'll have to start the database in single user mode:
Stop the database server as operating system user postgres:
/path/to/postgresql/bin/pg_ctl stop -D /path/to/data/directory
Start the server in single user mode:
/path/to/postgresql/bin/postgres --single -D /path/to/data/directory postgres
Now you are a superuser.
Restore the superuser privilege:
ALTER ROLE postgres SUPERUSER
Exit from the session with CTRL+D (or CTRL+Z if you are on Windows).
Restart PostgreSQL the way you normally do it.

Postgres: Using dblink to make remote connection

We got a Postgres database credentials (with SSL on) from our contractor, which allow us to connect to the DB using pdAdmin 3. The DB is read-only (can't do pg_dump) to us and basically the contractor will not grant us more privileges.
We need to fetch some data from this remote DB to our local DB. So I wanted to use dblink to perform this task.
I run this on psql:
insert into shifts select * from dblink('hostaddr=remote_addr port=9000 dbname=production user=user password=passwd', 'select user_id, location_id from shifts') as t1(user_id integer, location_id integer);
Then I got:
ERROR: password is required DETAIL: Non-superuser cannot connect if
the server does not request a password. HINT: Target server's
authentication method must be changed.
Since I am new to Postgres and dblink, I have no idea why it is complaining there is no password. And I wonder, to do a dblink connection, does the remote database needs to grant any more privileges?
If the pdAdmin 3 is able to connect to the remote DB with the credentials, what should I do to make dblink work?
Thanks!
Yes only superuser can provide you to the facility to connect through DBLINK
just run this command below whether you are able to connect to database
SELECT dblink_connect('myconn', 'dbname=postgres');
SELECT dblink_connect('myconn', 'hostaddr=remote_addr port=9000 dbname=production user=user password=passwd');
just give the name of database u want to connect after dbname
You can connect
dblink_connect_u
dblink_connect_u() is identical to dblink_connect(), except that it
will allow non-superusers to connect using any authentication method.
Link on postgres site is
dblink
For Superuser ask them to create extension
CREATE EXTENSION dblink;
for your database or schema .

Postgresql creating database

Well I installed the latest postgreql database on my Windows 7.
Now I'm trying to create a database via the psql.exe command line
When I open it, it says
psql: FATAL: database "Jansu" does not exist
So I read somewhere, that when no database is specified, it tried to find database with my username or something.
Anyways..how do i create a new database, when I can't access the commandline.
Read psql syntax. You can specify database, user and other parameters. If it's a new installation, there should be a default database 'postgres', you can connect to that one.
psql -U postgres postgres
(In Unix environments you might need to add -h localhost in order to force a TCP connection, otherwise it'd try to use Unix-domain sockets, which might not work for other than the postgres user. )
You can create databases from there, or from the command line with createdb