dblink-эквивалент для объединения таблиц rds postgres и rds mysql - PullRequest
0 голосов
/ 27 мая 2019

Я хотел бы использовать эквивалент dblink для объединения таблиц rds postgresql и rds mysql. Сама dblink здесь не подходит, потому что она работает для объединения таблиц из двух экземпляров postgresql. Говоря о автономном экземпляре, я бы хотел использовать расширение mysql_fdw. Но это не поддерживается Amazon.

Попробовал гуглить и нашел

Вы не можете добавлять свои собственные расширения в RDS, по крайней мере те, которые требуют прав суперпользователя (как и все, что связано с кодом C). Это один из недостатков, которые вы принимаете в обмен на удобное управление. https://dba.stackexchange.com/questions/111477/amazon-rds-postgresql-adding-new-extensions

Какое другое решение поддерживается Amazon для объединения таблиц rds postgres и rds mysql? Я собираюсь запустить запрос из rds postgres db (но, пожалуйста, сообщите mb, что есть другой способ).

Список поддерживаемых расширений в PostgreSQL RDS: address_standardizer, address_standardizer_data_us, amcheck, aws_commons, aws_s3, bloom, btree_gin, btree_gist, chkpass, citext, cube, dblink, dict_int, dictistance, hstt, htlthl, htl, rell, hstl, htl, rell, hstre, hll, inst , INTArray, ip4r, ISN, log_fdw, ltree, orafce, pageinspect, pgaudit, pgcrypto, pglogical, pgrouting, pgrowlocks, pgstattuple, pg_buffercache, pg_freespacemap, pg_hint_plan, pg_prewarm, pg_repack, pg_similarity, pg_stat_statements, pg_trgm, pg_visibility, plcoffee, ФАПЧ, plperl , plpgsql, pltcl, plv8, PostGIS, postgis_tiger_geocoder, postgis_topology, postgres_fdw, приставка, sslinfo, tablefunc, test_parser, tsearch2, tsm_system_rows, tsm_system_time, unaccent, UUID-OSSP.

Теперь, как предложено ниже, я изучаю http get (в базе данных MySQL уже включен API). PostgreSQL RDS (Amazon) не поддерживает расширение Python, но вместо этого поддерживает Perl. Вот как это выглядит в python:

CREATE OR REPLACE FUNCTION get(uri character varying)
  RETURNS json AS
$BODY$
import urllib2

data = urllib2.urlopen(uri)

return data.read()

$BODY$
  LANGUAGE plpython2u VOLATILE
  COST 100;

Вот как я думаю, это должно выглядеть в perl:

CREATE LANGUAGE plperl;

CREATE OR REPLACE FUNCTION get(input_url character varying)
  RETURNS json AS
$BODY$
use warnings;

import LWP::Simple;
warn "@INC";
my $url = input_url;
my $content = get($url);
$content =~ s/ /%20/g;
return $content;

$BODY$
  LANGUAGE plperl VOLATILE
  COST 100;
ALTER FUNCTION get(character varying)
  OWNER TO user;

Но когда я пытаюсь запустить мою функцию perl, она возвращает ошибку:

select get('ipinfo.io/ip');

ВНИМАНИЕ: / usr / local / lib64 / perl5 / usr / local / share / perl5 / usr / lib64 / perl5 / vendor_perl / usr / share / perl5 / vendor_perl / usr / lib64 / perl5 / usr / share / perl5. в строке 5.

ОШИБКА: неопределенная подпрограмма & main :: get вызывается в строке 7. КОНТЕКСТ: PL / Perl функция "получить"

********** Ошибка **********

ОШИБКА: неопределенная подпрограмма & main :: get вызывается в строке 7. Состояние SQL: 38000 Контекст: PL / Perl функция "get"

Пожалуйста, сообщите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...