АРМ РДС 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 2

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;