Як встановити 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, я не впевнений, якщо у вас виникають проблеми з встановленням pgcrypto або якщо у вас виникають проблеми з його налаштуванням для встановлення db. Це здається, що у вас є питання репо. Перевірте, чи існує цей файл на цьому шляху, /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

Коли я бігаю, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.