如何在PostgreSQL 8.4中安装pgcrypto?


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')在数据库查询中使用该功能?


更新:我正在努力在另一台Ubuntu计算机上安装pgcrypto。使用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/但没有与加密相关的地方。
乔纳斯(Jonas)

Answers:


17

对于较新版本的PG,请查看Dustin Kirkland的以下答案

它是Postgres的外部模块。您应该postgresql-contrib-8.4通过apt 安装(或pg版本)软件包:

apt-get install postgresql-contrib-8.4

然后,您可以在文件/usr/share/postgresql夹中的某个位置找到sql安装文件,并且需要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
乔纳斯(Jonas)

这就是这样做的方式。我对答案进行了略微更新,以包括该软件包的版本说明
DrColossos 2011年

1
啊,命令是\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
乔纳斯(Jonas)

9
在postgresql 9.1下,您可以在命令行中输入:CREATE EXTENSION pgcrypto
Danubian Sailor

19

PostgreSQL 9.1+

请注意,我在使用Postgresql 9.1的Ubuntu 12.04上工作。

在那里,我需要:

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+的问题(添加此功能时),因为OP明确要求使用8.4,而他的版本不支持CREATE EXTENSION (这使其他答案严格来说是正确的。
埃文·卡洛尔(Evan Carroll)

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.