Jak zainstalować pgcrypto w PostgreSQL 8.4?

23

Używam Ubuntu Server 10.10 i zainstalowałem PostgreSQL 8.4 apt-get install postgresql. Chciałbym skorzystać z wbudowanej sha1()funkcji, ale wygląda na to, że pgcryptonajpierw muszę zainstalować . Ale nie wiem jak to zainstalować.

Nie ma opcji, pgcryptojeśli spróbuję go zainstalować przy użyciu apt-get install pgcryptoi nie znajdę żadnych plików zaczynających się pgcryptow moim systemie (próbowałem find / -name "pgcrypto*").

Jak zainstalować pgcrypto, aby móc korzystać z digest('word-to-hash','sha1')funkcji w zapytaniach do bazy danych?


Aktualizacja: Mam problem z zainstalowaniem pgcrypto na innym komputerze Ubuntu. Po zainstalowaniu pakietu przy użyciu sudo apt-get install postgresql-contrib-8.4tego, jak zainstalować go w mojej bieżącej bazie danych PostgreSQL?

Jonas
źródło
Cześć @Jonas, nie jestem pewien, czy masz problemy z instalacją pgcrypto lub czy masz problemy z uruchomieniem go z instalacją db. Wygląda na to, że masz problem z repo. Sprawdź, czy ten plik istnieje na tej ścieżce /usr/local/pgsql/share/contrib/pgcrypto.sqli daj nam znać.
jcolebrand
@jcolebrand: Nie, nie mam /usr/local/pgsqlkatalogu. Jedyne miejsce, w którym mam *.sqlpliki, /usr/share/postgresql/8.4/nie jest związane z kryptografią.
Jonas,

Odpowiedzi:

17

W przypadku nowszej wersji PG sprawdź odpowiedź Dustina Kirklanda poniżej

To zewnętrzny moduł dla Postgres. Powinieneś zainstalować postgresql-contrib-8.4pakiet (lub swoją wersję pg) poprzez apt:

apt-get install postgresql-contrib-8.4

Następnie znajdziesz gdzieś w /usr/share/postgresqlfolderze plik instalacyjny sql i będziesz musiał uruchomić pgcryto.sqlgo w bazie danych.

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

Lub,

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

    database=# \i pgcrypto.sql
DrColossos
źródło
Kiedy biegnę sudo apt-get install postgres-contrib, dostajęE: Unable to locate package postgres-contrib
Jonas
Poszukałem go i teraz go zainstalowałem, sudo apt-get install postgresql-contrib-8.4a następnie uruchomiłem \i <path-to-pgcrypto>za pomocą psql.
Jonas,
Tak to się robi. Lekko zaktualizowałem odpowiedź, aby uwzględnić notatkę dotyczącą wersji pakietu
DrColossos
1
Ach, polecenie było\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
Jonas
9
Pod postgresql 9.1 wpisujesz w linii poleceń: CREATE EXTENSION pgcrypto
Danubian Sailor
19

PostgreSQL 9.1+

Zauważ, że pracuję na Ubuntu 12.04, który używa Postgresql 9.1.

Tam musiałem:

sudo apt-get install postgresql-contrib

A potem w mojej bazie danych:

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

A teraz mogę korzystać z funkcji 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
Dustin Kirkland
źródło
Naprawdę podoba mi się ta odpowiedź, chociaż powinieneś sam odpowiedzieć na pytanie dotyczące wersji 9.1+ (kiedy ta funkcja została dodana) Ponieważ OP wyraźnie poprosił o wersję 8.4, a jego wersja nie obsługuje CREATE EXTENSION (co sprawia, że ​​druga odpowiedź jest ściśle mówiąc poprawna.
Evan Carroll
0

W najnowszej wersji ścieżka do pliku nie ma końca pgcrypto.sql.

Utwórz rozszerzenie pgcrypto pod wymaganym użytkownikiem.

$ 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=> 

Jeśli w takim przypadku użytkownik nie ma uprawnień do utworzenia rozszerzenia, udziel uprawnienia administratora, logując się jako użytkownik postgres (domyślny) i spróbuj ponownie.

$ 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
Veeresh Digasangi
źródło