标签: postgresql

如何为 PostgreSQL 的 psql 客户端设置外部编辑器?

我在~/.psqlrc文件中放什么来设置默认编辑器?

我要使用的编辑器 ( Textmate ) 位于/Users/username/bin/mate.

在文档中找到了他们谈论它的地方,并尝试了几种语法变体,但似乎无法使其正常工作。

例如,这不起作用......

\set PSQL_EDITOR "/Users/username/bin/mate"
Run Code Online (Sandbox Code Playgroud)

在 psql 中,当我输入时,\e我得到...

sh: /usr/local/bin/mate: No such file or directory
sh: line 0: exec: /usr/local/bin/mate: cannot execute: No such file or directory
Run Code Online (Sandbox Code Playgroud)

postgresql

9
推荐指数
2
解决办法
1万
查看次数

PostgreSQL:更改用户密码不起作用

  • 我安装PostgreSQLEC2机器上,现在我想更改用户的密码postgres
  • 我愿意
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
Run Code Online (Sandbox Code Playgroud)
  • 然后我退出shell并尝试使用新密码登录
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"
Run Code Online (Sandbox Code Playgroud)

我的PostgreSQL版本是

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

谢谢

更新 我进行了更改pg_hba.conf,这就是现在的样子

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.1

9
推荐指数
2
解决办法
3万
查看次数

在 PL/pgSQL 中声明表类型的变量

我想知道是否有办法在 PL/pgSQL 中声明表类型的变量来保存查询结果?例如,我如何表达如下内容:

q1 = select * from foo;
q2 = select * from bar;
for t1 in q1:
  for t2 in q2:
    -- do something with t1 and t2
Run Code Online (Sandbox Code Playgroud)

我查看了 return next 构造,但它似乎只能处理返回值。

postgresql stored-procedures plpgsql

9
推荐指数
1
解决办法
4万
查看次数

当无法立即锁定所选行时,PostgreSQL`FOR UPDATE NOWAIT` 究竟返回了什么错误?

所述的PostgreSQL 9.4文档指出添加NOWAIT选项将SELECT FOR UPDATE当行不能被锁定时产生一个错误的装置:

要防止操作等待其他事务提交,请使用 NOWAIT 选项。使用 NOWAIT,如果无法立即锁定所选行,该语句将报告错误,而不是等待。

那究竟是什么错误?

由于这是一个可接受的条件,我希望我的 Java 代码检查此类预期错误,然后解决它。

postgresql select locking

9
推荐指数
1
解决办法
6790
查看次数

在 PostgreSQL 中压缩序列

id serial PRIMARY KEY在 PostgreSQL 表中有一个列。id因为我删除了相应的行,所以缺少许多s。

现在我想通过重新启动序列并以保留id原始id顺序的方式重新分配s来“压缩”表。是否可以?

例子:

  • 现在:

 id | data  
----+-------
  1 | hello
  2 | world
  4 | foo
  5 | bar
Run Code Online (Sandbox Code Playgroud)
  • 后:

 id | data  
----+-------
  1 | hello
  2 | world
  3 | foo
  4 | bar
Run Code Online (Sandbox Code Playgroud)

我尝试了 StackOverflow answer 中建议的内容,但没有奏效:

# alter sequence t_id_seq restart;
ALTER SEQUENCE
# update t set id=default;
ERROR:  duplicate key value violates unique constraint t_pkey
DETAIL:  Key …
Run Code Online (Sandbox Code Playgroud)

postgresql primary-key sequence gaps-and-islands

9
推荐指数
1
解决办法
2590
查看次数

固定宽度行会提高 PostgreSQL 读取性能吗?

我有一张桌子articles

                                                       Table "articles"
     Column     |            Type             |                     Modifiers                      | Storage  | Stats target | Description
----------------+-----------------------------+----------------------------------------------------+----------+--------------+-------------
 id             | integer                     | not null default nextval('articles_id_seq'::regclass) | plain    |              |
 user_id        | integer                     |                                                    | plain    |              |
 title          | character varying(255)      |                                                    | extended |              |
 author         | character varying(255)      |                                                    | extended |              |
 body           | text                        | default '--- []                                   +| extended |              |
                |                             | '::text                                            |          |              |
 created_at     | timestamp without time zone | …
Run Code Online (Sandbox Code Playgroud)

postgresql performance datatypes postgresql-9.4 query-performance

9
推荐指数
1
解决办法
1694
查看次数

postgres:如何允许同一用户创建索引但不允许表更改或表删除?

我正在设置一个 postgres 服务器,它将是一个(主要是)只读工作负载。

我想允许我自己和同事按照我们认为合适的方式创建/删除索引,而不允许我们删除表或改变表。

我花了一些时间阅读授权/撤销文档以及角色文档页面,但似乎表所有者角色获得了这两种权力。

我发现的一件事是,据说,在表空间上授予创建允许创建索引,但它不起作用(注意,我没有创建任何其他表空间)。

具体来说,我试过:

mydb=# grant create on tablespace pg_default to bob;
GRANT
Run Code Online (Sandbox Code Playgroud)

...然后切换到鲍勃:

mydb=> create index on foo(a);
ERROR:  must be owner of relation foo
Run Code Online (Sandbox Code Playgroud)

我也尝试让 bob 成为所有者,但是 bob 获得了删除表的权利,而且似乎无法撤销该特权。所以我要么两者兼而有之,要么什么都不做。

有任何想法吗?

postgresql permissions role

9
推荐指数
1
解决办法
4711
查看次数

为什么 't' 和 'f' 而不是 TRUE 和 FALSE

为什么 PostgreSQL 返回 't' 和 'f' 而不是 TRUE 和 FALSE?

文档本身的建议我们将布尔值或进行比较时使用的真与假,但选择从数据库中的值时,返回不同的价值观。

CREATE TABLE test1 (a boolean, b text);
INSERT INTO test1 VALUES (TRUE, 'sic est');
INSERT INTO test1 VALUES (FALSE, 'non est');
SELECT * FROM test1;
 a |    b
---+---------
 t | sic est
 f | non est
Run Code Online (Sandbox Code Playgroud)

这种行为有原因吗?PostgreSQL 社区有没有尝试过改变它?

postgresql datatypes psql

9
推荐指数
1
解决办法
6525
查看次数

使用复合类型创建新表

在 ORDBMS 数据库中,我看到可以使用复杂类型:

create type name as( ...)
Run Code Online (Sandbox Code Playgroud)

我可以在创建新表时引用这些类型,例如:

create table example (row_name ref(name))
Run Code Online (Sandbox Code Playgroud)

如何在 PostgreSQL 中实现相同的目标?

postgresql database-design ddl composite-types

9
推荐指数
1
解决办法
4670
查看次数

无需停机即可从已删除的列中回收磁盘空间

我在 PostgreSQL 数据库中有一个大量使用的表(大约有 500 万行),我想在其中删除一列并回收该列使用的空间。

文档建议进行表重写ALTER TABLE以强制返回空间,但这在使用表时运行并不安全,并且会导致停机。是否有任何不需要停机的实用选项?我试图运行该pgcompact工具,但这并没有改变任何东西。

postgresql disk-space ddl vacuum postgresql-9.3

9
推荐指数
1
解决办法
3555
查看次数