Я снова запустил мой (python) скрипт, и CREATE EXTENSION запустился без ошибок. Сценарий также выполняет эту команду
psql -d VGDB -U postgres -c "select * from pg_available_extensions order by name"
, что включает в себя следующее в наборе результатов:
pgcrypto | 1.0 | 1.0 | cryptographic functions
Итак, psql считает, что он установил pgcrypto.
Позже в том же сценарии, когда я выполняю
psql -d VGDB -U postgres -f sql/Create.Credentials.table.sql
где sql / Create.Credentials.table.sql включает это
insert into credentials values('demo', pgp_sym_encrypt('password', 'longpassword'));
Я понял
psql:sql/Create.Credentials.table.sql:31: ERROR: function pgp_sym_encrypt(unknown, unknown) does not exist
LINE 1: insert into credentials values('demo', pgp_sym_encrypt('pass...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Когда я открываю pgadmin, он не показывает pgcrypto ни в базах данных VGDB, ни в postgres, хотя запрос, вызванный psql, показывает, что pgcrypto установлен.
Может ли быть проблема с необходимостью фиксации после использования psql для выполнения команды "создать расширение ..."? Ни один из моих других операторов DDL или SQL не требует фиксации при выполнении с помощью psql.
Это начинает выглядеть так, будто psql просто ненормальный. Есть ли другой способ вызвать «создать расширение pgcrypto» - например, с классами поддержки базы данных Python - или это нужно запускать через psql?