АРМ РДС 9.5.4 расширений для PostgreSQL с PostGIS тигр геокодер отсутствует функция Soundex?
Я пытаюсь установить "одобренное" AWS расширение PostgreSql на наш экземпляр on large RDS, но каждый раз, когда я пытаюсь "создать расширение postgis_tiger_geocoder", я получаю следующее:
Ошибка SQL [42883]: ошибка: функция soundex (изменение символов) не существует
Я провел много времени, читая форумы AWS / postgis / postgresql, но, к сожалению, не нашел надписи на стене.
Шаги Принято
Установлено расширение POSTGIS
create EXTENSION postgis;
Установлено расширение FuzzyStrMatch, содержащее функцию soundex (проверено)
create EXTENSION fuzzystrmatch;
Наконец, когда я запускаю это расширение create, я получаю ошибку выше
create extension postgis_tiger_geocoder;
SQL Error [42883]: ERROR: function soundex(character varying) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Position: 57558
org.postgresql.util.PSQLException: ERROR: function soundex(character varying) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Position: 57558
Вещи, которые я пробовал:
set search_path = <schema_name>, public
Последовал сюда: Установка расширения PostgreSQL на все схемы Углубился в документацию по установке postgis Прочитайте документацию RDS по добавлению расширений...
Если кто-нибудь пришлось иметь дело с этим разочарованием на AWS я с радостью поменяю несколько оставшихся волос, оставшихся на моей голове, так как я не смог обойти это.
Результаты dx+
Objects in extension "fuzzystrmatch"
Object Description
--------------------------------------------------------------------------------
function <schema>.difference(...)
function <schema>.dmetaphone_alt(...)
function <schema>.dmetaphone(...)
function <schema>.levenshtein_less_equal(...)
function <schema>.levenshtein_less_equal(...)
function <schema>.levenshtein(...)
function <schema>.levenshtein(...)
function <schema>.metaphone(...)
function <schema>.soundex(...)
function <schema>.text_soundex(...)
(10 rows)
Результаты dfS+ soundex
List of functions
Schema | Name | Result data type | Argument data types | Type | Volatility | Owner | Security | Access privileges | Language | Source code | Description
--------+------+------------------+---------------------+------+------------+-------+----------+-------------------+----------+-------------+-------------
(0 rows)
2 ответа:
Имел ту же проблему, решив ее путем изменения search_path для базы данных и повторного подключения перед созданием расширения postgis_tiger_geocoder. Ищите часть исправления:
-- Postgis Installation ------------------------------------------------------------------------------------------------------------------------------------------------ -- PostGIS AWS Configuration -- -- https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html#Appendix.PostgreSQL.CommonDBATasks.PostGIS -- ------------------------------------------------------------------------------------------------------------------------------------------------ -- On postgis schema SET SCHEMA '${POSTGIS_SCHEMA_NAME}'; -- Step 2: Load the PostGIS Extensions create extension postgis; create extension fuzzystrmatch; -- FIX : To avoid "ERROR: function soundex(character varying) does not exist", change schema and reconnect ALTER DATABASE ${DATABASE_NAME} SET search_path=${POSTGIS_SCHEMA_NAME}; \connect ${DATABASE_NAME}; -- End FIX create extension postgis_tiger_geocoder; create extension postgis_topology; -- Step 3: Transfer Ownership of the Extensions to the rds_superuser Role alter schema tiger owner to ${MASTER_USER}; alter schema tiger_data owner to ${MASTER_USER}; alter schema topology owner to ${MASTER_USER}; -- Step 4: Transfer Ownership of the Objects to the rds_superuser Role CREATE FUNCTION exec(text) returns text language plpgsql volatile AS $f$ BEGIN EXECUTE $1; RETURN $1; END; $f$; SELECT exec('ALTER TABLE ' || quote_ident(s.nspname) || '.' || quote_ident(s.relname) || ' OWNER TO ${MASTER_USER};') FROM ( SELECT nspname, relname FROM pg_class c JOIN pg_namespace n ON (c.relnamespace = n.oid) WHERE nspname in ('tiger','topology') AND relkind IN ('r','S','v') ORDER BY relkind = 'S') s; -- Adding postgis to default schema ALTER DATABASE ${DATABASE_NAME} SET search_path=${SCHEMA_NAME},${POSTGIS_SCHEMA_NAME};
У
Была та же проблема. Оказывается, все функции fuzzystrmatch были созданы внутри неправильной схемы.
Подключенный к командной строке psql, я использовал команду
drop extension
для перезапуска процесса создания расширений:drop extension postgis_topology; drop extension postgis; drop extension fuzzystrmatch;
Затем, чтобы быть уверенным, отключил с помощью
\q
.Снова подключил psql.
Задайте для схемы значение public:
set schema 'public';
Затем выполните процесс, описанный в AWS RDS Docs
create extension postgis; create extension fuzzystrmatch; create extension postgis_tiger_geocoder; create extension postgis_topology;