Как установить pgcrypto в PostgreSQL 8.4?

23

Я использую Ubuntu Server 10.10, и я установил PostgreSQL 8.4, используя apt-get install postgresql. Я хотел бы использовать встроенную sha1()функцию, но кажется, что я должен установить в pgcryptoпервую очередь. Но я не знаю, как его установить.

Нет, pgcryptoесли я пытаюсь установить его с помощью, apt-get install pgcryptoи я не нахожу никаких файлов, начиная с pgcryptoмоей системы (я пытался find / -name "pgcrypto*").

Как мне установить pgcrypto, чтобы я мог использовать эту digest('word-to-hash','sha1')функцию в своих запросах к базе данных?


Обновление: я пытаюсь установить pgcrypto на другой компьютер с Ubuntu. После установки пакета, используя sudo apt-get install postgresql-contrib-8.4как установить его в мою текущую базу данных PostgreSQL?

Jonas
источник
Привет @Jonas, я не уверен, что у тебя проблемы с установкой pgcrypto или у тебя проблемы с тем, чтобы он работал с твоей установкой БД. Похоже, у вас есть проблема репо. Убедитесь, что этот файл существует по этому пути, /usr/local/pgsql/share/contrib/pgcrypto.sqlи дайте нам знать.
Jcolebrand
@jcolebrand: Нет, у меня нет /usr/local/pgsqlкаталога. Единственное место, где у меня есть *.sqlфайлы, /usr/share/postgresql/8.4/но не связанные с криптографией.
Джонас

Ответы:

17

Для более новой версии PG, проверьте ответ ниже Дастином Кирклендом

Это внешний модуль для Postgres. Вы должны установить postgresql-contrib-8.4(или вашу версию pg) через apt:

apt-get install postgresql-contrib-8.4

Затем вы найдете установочный файл sql где-нибудь в /usr/share/postgresqlпапке, и вам нужно будет запустить pgcryto.sqlбазу данных.

psql -d <database> -f /usr/share/postgresql/8.4/contrib/pgcrypto.sql

Или,

$ cd /usr/share/postgresql/8.4/contrib
$ psql -d <database>
    psql (8.4.8)
    Type "help" for help.

    database=# \i pgcrypto.sql
DrColossos
источник
Когда я бегу, sudo apt-get install postgres-contribя получаюE: Unable to locate package postgres-contrib
Jonas
Я гуглил, и теперь я установил его с помощью, sudo apt-get install postgresql-contrib-8.4а затем запустить \i <path-to-pgcrypto>с помощью psql.
Джонас
Это способ сделать это. Я немного обновил ответ, чтобы включить примечание о версии для пакета
DrColossos
1
Ах, команда была\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
Джонас
9
Под postgresql 9.1 вы вводите в командной строке: CREATE EXTENSION pgcrypto
Danubian Sailor
19

PostgreSQL 9.1+

Обратите внимание, что я работаю над Ubuntu 12.04, которая использует postgresql 9.1.

Там мне нужно было:

sudo apt-get install postgresql-contrib

И тогда в моей базе данных:

postgres@ztrustee:~$ psql test
psql (9.1.3)
Type "help" for help.
test=# CREATE EXTENSION pgcrypto;
CREATE EXTENSION

И теперь я могу использовать функциональность pgcrypto, gen_random_bytes ():

test=# create table test ( 
  id 
    text 
    not null 
    default encode( gen_random_bytes( 32 ), 'hex' ) 
    primary key, 
  value 
    text 
); 
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
test=# \d test
                            Table "public.test"
 Column | Type |                         Modifiers                          
--------+------+------------------------------------------------------------
 id     | text | not null default encode(gen_random_bytes(32), 'hex'::text)
 value  | text | 
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)

test=# insert into test (value) VALUES ('scoobydoo');
INSERT 0 1
test=# select * from test;
                                id                                |   value   
------------------------------------------------------------------+-----------
 76dd5bd0120d3df797f932fbcb4f8aa5088e215ee2b920dddbff59c8595fbac7 | scoobydoo
Дастин Киркланд
источник
Мне очень нравится этот ответ, но вы должны иметь самостоятельно ответил на вопрос для 9.1+ (когда была добавлена эта функция) Как ОР четко просил 8.4 и его версия не поддерживает CREATE EXTENSION (что делает другой ответ , строго говоря , правильно.
Эван Кэрролл
0

В последней версии путь к файлу не заканчивается на pgcrypto.sql.

Создайте расширение pgcrypto под нужным пользователем.

$ psql -U <username> -d mydb

psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.

mydb=> CREATE EXTENSION pgcrypto;

CREATE EXTENSION
mydb=> 

Если в этом случае у пользователя нет разрешения на создание расширения, дайте разрешение суперпользователя, войдя в систему как postgres (по умолчанию), и попробуйте снова.

$ psql --u postgres

psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# ALTER USER <username> WITH SUPERUSER;

ALTER ROLE
Виреш Дигасанги
источник