PostgreSQL/DBLink: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
{|class='wikitable | {|class='wikitable' | ||
|valign='top' style='width:50%'| | |valign='top' style='width:50%'| | ||
<syntaxhighlight | <syntaxhighlight lang='bash'> | ||
ENABLE_DB_LINK=$(cat <<-DDL | ENABLE_DB_LINK=$(cat <<-DDL | ||
CREATE EXTENSION IF NOT EXISTS dblink; | CREATE EXTENSION IF NOT EXISTS dblink; | ||
| Line 16: | Line 16: | ||
==POC== | ==POC== | ||
{|class='wikitable mw-collapsible | {|class='wikitable mw-collapsible' | ||
!scope='col' style='text-align:left' colspan='2'| | !scope='col' style='text-align:left' colspan='2'| | ||
DBLink POC | DBLink POC | ||
|- | |- | ||
|valign='top' style='width:50%'| | |valign='top' style='width:50%'| | ||
<syntaxhighlight | <syntaxhighlight lang='sql'> | ||
CREATE EXTENSION dblink; | CREATE EXTENSION dblink; | ||
CREATE EXTENSION dblink SCHEMA extensions; | CREATE EXTENSION dblink SCHEMA extensions; | ||
| Line 31: | Line 31: | ||
|- | |- | ||
|valign='top' colspan='2'| | |valign='top' colspan='2'| | ||
<syntaxhighlight | <syntaxhighlight lang='sql'> | ||
-- using pgsql block | -- using pgsql block | ||
DO | DO | ||
| Line 55: | Line 55: | ||
|- | |- | ||
|valign='top'| | |valign='top'| | ||
<syntaxhighlight | <syntaxhighlight lang='sql'> | ||
-- using pgsql query | -- using pgsql query | ||
WITH user_info AS ( | WITH user_info AS ( | ||
| Line 83: | Line 83: | ||
==Exec== | ==Exec== | ||
{|class='wikitable mw-collapsible | {|class='wikitable mw-collapsible' | ||
!scope='col' style='text-align:left' colspan='2'| | !scope='col' style='text-align:left' colspan='2'| | ||
DBLink Exec | DBLink Exec | ||
|- | |- | ||
|valign='top' colspan='2'| | |valign='top' colspan='2'| | ||
<syntaxhighlight | <syntaxhighlight lang='sql'> | ||
DO | DO | ||
$BODY$ | $BODY$ | ||
| Line 100: | Line 100: | ||
|- | |- | ||
|valign='top' style='width:50%'| | |valign='top' style='width:50%'| | ||
<syntaxhighlight | <syntaxhighlight lang='sql'> | ||
DO | DO | ||
$BODY$ | $BODY$ | ||
| Line 133: | Line 133: | ||
==References== | ==References== | ||
{|class='wikitable mw-collapsible | {|class='wikitable mw-collapsible' | ||
!scope='col' style='text-align:left' colspan='3'| | !scope='col' style='text-align:left' colspan='3'| | ||
References | References | ||
Latest revision as of 20:50, 19 January 2026
ENABLE_DB_LINK=$(cat <<-DDL
CREATE EXTENSION IF NOT EXISTS dblink;
CREATE EXTENSION IF NOT EXISTS dblink SCHEMA extensions;
SELECT * FROM pg_available_extensions WHERE name = 'dblink';
DDL
)
echo "${ENABLE_DB_LINK}" | psql -p 5432 -U ${USER}
echo "${ENABLE_DB_LINK}" | psql -p 5432 -U ${USER} academia_data_staging
|
POC
|
DBLink POC | |
|---|---|
CREATE EXTENSION dblink;
CREATE EXTENSION dblink SCHEMA extensions;
SELECT * FROM pg_available_extensions;
SELECT * FROM pg_available_extensions WHERE name = 'dblink';
|
|
-- using pgsql block
DO
$BODY$
DECLARE
p_db_host varchar:= host(inet_server_addr());
p_db_port varchar:= inet_server_port();
p_db_user varchar:= CURRENT_USER;
p_db_pass varchar:= 'p@$$w0rd';
p_db_name varchar:= 'postgres';
p_db_extn_name varchar;
p_db_exec_query varchar;
p_db_conn_format varchar:= 'hostaddr=%s port=%s dbname=%s user=%s password=%s';
p_db_conn_string varchar:= format(p_db_conn_format, p_db_host, p_db_port, p_db_name, p_db_user, p_db_pass);
BEGIN
p_db_exec_query := 'SELECT name FROM pg_available_extensions WHERE name = ''dblink''';
SELECT INTO p_db_extn_name name FROM dblink(p_db_conn_string, p_db_exec_query) AS extensions(name varchar);
RAISE NOTICE 'Extension Name: %', p_db_extn_name;
END
$BODY$;
| |
-- using pgsql query
WITH user_info AS (
SELECT
'hostaddr=%s port=%s dbname=%s user=%s password=%s' "db_conn_format",
host(inet_server_addr()) "db_host",
inet_server_port() "db_port",
CURRENT_USER "db_user",
'p@$$w0rd' "db_pass",
'postgres' "db_name"
)
, conn_info AS (
SELECT
db_conn_format,
format(db_conn_format, db_host, db_port, db_name, db_user, db_pass) "db_conn_string",
'SELECT name FROM pg_available_extensions WHERE name = ''dblink''' "db_exec_query"
FROM user_info
)
SELECT * FROM dblink(
(SELECT db_conn_string FROM conn_info),
(SELECT db_exec_query FROM conn_info)
) AS extensions(name varchar)
|
|
Exec
|
DBLink Exec | |
|---|---|
DO
$BODY$
DECLARE
p_connstr text := 'hostaddr=127.0.0.1 port=5432 dbname=academia';
BEGIN
PERFORM dblink_exec(p_connstr, format('UPDATE commission SET type = ''%s'' WHERE type = ''%s''', 'new_type', 'old_type'));
END
$BODY$;
| |
DO
$BODY$
DECLARE
p_schema varchar := 'academia';
p_passwd varchar := 'p@$$w0rd';
p_dbname varchar := 'academia_audit_staging';
p_dblink varchar := 'hostaddr=127.0.0.1 port=5432 dbname=postgres';
BEGIN
SELECT INTO p_dblink
'hostaddr='|| host(inet_server_addr()) ||
' port=' || inet_server_port() || ' dbname=' || current_database();
RAISE NOTICE '%', p_dblink;
IF NOT EXISTS (SELECT FROM pg_catalog.pg_database WHERE datname = p_dbname) THEN
-- PERFORM dblink_exec(p_dblink, format('CREATE DATABASE %s', p_dbname));
RAISE NOTICE 'CREATE DATABASE %', p_dbname;
END IF;
IF NOT EXISTS (SELECT FROM pg_catalog.pg_user WHERE usename = p_schema) THEN
-- PERFORM format('CREATE USER %s WITH ENCRYPTED PASSWORD ''%s''', p_schema, p_passwd);
RAISE NOTICE 'CREATE USER % WITH ENCRYPTED PASSWORD ''%''', p_schema, p_passwd;
END IF;
-- PERFORM format('GRANT ALL PRIVILEGES ON DATABASE %s TO %s', p_dbname, p_schema);
RAISE NOTICE 'GRANT ALL PRIVILEGES ON DATABASE % TO %', p_dbname, p_schema;
END
$BODY$;
|
|
References
|
References | ||
|---|---|---|