Фон:
Я использую PostgreSQL 9.3.5 на Ubuntu 14.04.
После плохого скрипта у меня есть таблица, которую мне нужно восстановить из файла дампа, созданного через pg_dump. В этой таблице у меня есть триггер аудита, основанный на этой вики-странице. Как видите, , функция триггера использует hstore.
Ошибка:
При попытке восстановления получаю:
$ pg_restore -a --dbname=a193 -Fc --host=localhost --port=5434 --username=postgres -W --table=foo ~/tmp/a193.dump
Password:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 4600; 0 26146 TABLE DATA foo u2su8s81ul0a52
pg_restore: [archiver (db)] COPY failed for table "foo": ERROR: type "hstore" does not exist
LINE 6: h_old hstore;
Расширение точно есть.
=> \dx
List of installed extensions
+--------------------+---------+------------+--------------------------------------------------------------+
| Name | Version | Schema | Description |
+--------------------+---------+------------+--------------------------------------------------------------+
| dblink | 1.1 | public | connect to other PostgreSQL databases from within a database |
| hstore | 1.2 | public | data type for storing sets of (key, value) pairs |
| isn | 1.0 | public | data types for international product numbering standards |
| pg_stat_statements | 1.1 | public | track execution statistics of all SQL statements executed |
| pgcrypto | 1.0 | public | cryptographic functions |
| plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language |
| plpythonu | 1.0 | pg_catalog | PL/PythonU untrusted procedural language |
| postgres_fdw | 1.0 | public | foreign-data wrapper for remote PostgreSQL servers |
| uuid-ossp | 1.0 | public | generate universally unique identifiers (UUIDs) |
+--------------------+---------+------------+--------------------------------------------------------------+
(9 rows)
И я могу использовать его в запросе (как пользователь postgres — та же роль, которую я использую выше для восстановления):
=> select current_user;
+--------------+
| current_user |
+--------------+
| postgres |
+--------------+
(1 row)
=> \du
List of roles
+----------------+------------------------------------------------+-----------+
| Role name | Attributes | Member of |
+----------------+------------------------------------------------+-----------+
| postgres | Superuser, Create role, Create DB, Replication | {} |
| u2su8s81ul0a52 | | {} |
+----------------+------------------------------------------------+-----------+
=> select 'a=>1'::hstore;
+----------+
| hstore |
+----------+
| "a"=>"1" |
+----------+
(1 row)
Вопросы:
- Почему я получаю эту ошибку, когда в базе данных установлено это расширение?
- Как я могу обойти эту проблему, кроме сброса триггера? Отбрасывание триггера — не самое худшее в мире, но кажется, что это должно быть возможно, и в производственной базе данных я хотел бы иметь возможность видеть контрольный след того, что кто-то восстановил данные и т. д.
-t
/--table
. - person JacobEvelyn   schedule 29.01.2015