小编Mar*_*tus的帖子

PostgreSQL:删除用户 postgres 的密码要求

我知道,在安装时,PostgreSQL 的 db root 用户 (postgres) 没有密码:

postgres=# select usename, passwd is null from pg_shadow;
 usename  | ?column? 
----------+----------
 postgres | t
(1 row)
Run Code Online (Sandbox Code Playgroud)

...建议将其设置为:

alter role postgres password '<<very-secret>>';
Run Code Online (Sandbox Code Playgroud)

(然后相应地更新pg_hba.conf文件)

我的问题是:当 user 不需要密码时,使用什么 SQL 来恢复到以前的情况postgres

一般来说,我如何删除任何角色的密码要求?我不是在问如何更改密码,而是在问如何删除密码要求(passwd表中的空列pg_shadow)。

postgresql linux postgresql-9.1

61
推荐指数
2
解决办法
14万
查看次数

使用 TIMESTAMP WITHOUT TIME ZONE 的有效用例是什么?

关于两者之间的差异,有一个很长且相当清晰的答案

  • TIMESTAMP WITH TIME ZONE -vs-
  • TIMESTAMP WITHOUT TIME ZONE

在 SO post Ignoring time zone together in Rails and PostgreSQL 中可用。

我想知道的是:实际使用是否有任何有效的用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式?

postgresql timestamp

55
推荐指数
3
解决办法
7万
查看次数

恢复 Postgres 数据库:pg_restore -vs- 只使用 psql

我正在使用pg_dump(纯文本格式)转储我的 Postgres 数据库,然后简单地使用psql(带有-f选项)来恢复它。

这就引出了一个问题:我不使用pg_restore这似乎是一个专门的恢复工具(与通用相比),我是否遗漏了什么psql

我可以通过使用pg_dump参数来控制诸如禁用触发器等选项。那么,是pg_restore用来做什么的呢?非纯文本转储格式?

postgresql postgresql-9.1

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

恢复转储时禁用所有约束和表检查

我已经获得了我的 PostgreSQL 数据库的转储:

pg_dump -U user-name -d db-name -f dumpfile
Run Code Online (Sandbox Code Playgroud)

然后我继续在另一个数据库中恢复:

psql X -U postgres  -d db-name-b -f dumpfile
Run Code Online (Sandbox Code Playgroud)

我的问题是数据库包含引用约束、检查和触发器,其中一些(特别是检查)在恢复过程中失败,因为信息没有按照会导致这些检查得到遵守的顺序加载。例如,在表中插入一行可能与CHECK调用一个plpgsql函数相关联,该函数检查某个条件是否在某个其他不相关的表中成立。如果后者没有psql在前者之前加载,则会发生错误。

下面是一个 SSCCE,它产生了这样一个一旦转储pg_dump就无法恢复的数据库:

CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$
    SELECT EXISTS (SELECT 1 FROM b)
$$ LANGUAGE SQL;

CREATE TABLE IF NOT EXISTS a (
     i              INTEGER                    NOT NULL
);

INSERT INTO a(i) VALUES (0),(1);
CREATE TABLE IF NOT EXISTS b (
    i  INTEGER NOT NULL
);
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design postgresql-9.1 pg-dump check-constraints

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

即使使用“shared_preload_libraries = 'pg_stat_statements',也找不到 pg_stat_statements”

我已按照以下说明进行操作:

http://www.postgresql.org/docs/9.3/static/pgstatstatements.html

... 添加以下几行的效果:

# postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Run Code Online (Sandbox Code Playgroud)

在文件中postgresql.conf然后重新启动服务器但表pg_stat_statements仍然不可见:

$ cat /usr/share/postgresql/9.3/postgresql.conf | grep -A3 ^shared_preload_libraries
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
pg_stat_statements.max = 10000
pg_stat_statements.track = all


$ sudo /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.3 database server          [ OK ] 

$ psql -U postgres
psql (9.3.10)
Type "help" for help.

postgres=# select count(*) from pg_stat_activity;
count 
-------
      1
(1 row)

postgres=# select count(*) from pg_stat_statements;
ERROR:  relation …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.3

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

检查字符类型列中是否存在空字符串

我有一个应用程序(作为其逻辑的一部分)在插入数据库之前修剪字符串并用 NULL 替换空字符串。我想确保强制执行的一种方法是在每个具有VARCHAR, TEXT(或类似)列的表上编写一个 CHECK 。

假设人们不能或不想这样做,有没有一种方法可以编写一个简单的通用 SQL 查询(从数据库的元数据中获取表名和列名)来检查数据库中是否有任何文本列包含空字符串?

postgresql database-design dynamic-sql plpgsql postgresql-9.1

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

日期时间小数秒

我正在阅读Sybase ASE 15.7 文档中对datetime数据类型的描述:

datetime 列包含 1753 年 1 月 1 日和 9999 年 12 月 31 日之间的日期。在支持此粒度级别的平台上,日期时间值精确到 1/300 秒。

我觉得上面的内容很混乱。首先,这是唯一添加了“在支持这种粒度级别的平台上”警告的数据类型。这究竟是什么意思,我如何确定我的平台是否是“支持这种粒度级别”的平台之一?

此外,我不清楚能够有效地准确存储 1/300 秒意味着什么。我正在使用 JDBC 访问数据库,其中唯一合理的类型是java.sql.Timestamp。这种类型允许我检索到纳秒的精度。但考虑到在一般情况下,除以 300 需要十进制系统中的无限位数,实际上需要小数纳秒(具有无限十进制数字)来保持表示为 1/300 秒的值。所以,这意味着我无法在不损失一些精度的情况下获取存储在服务器中的值,但可以忽略不计。

最后,当我执行以下查询时:

SELECT convert(char(32), submission_date, 139) FROM some..table
Run Code Online (Sandbox Code Playgroud)

我看到如下值:

Jan  6 2014 12:36:12.420000     
Sep 12 2013 13:44:57.100000     
Sep 10 2014 13:47:02.240000     
Sep 10 2014 13:47:07.850000     
Sep 10 2014 13:47:13.346000     
Sep 10 2014 13:47:19.033000     
Sep 10 2014 13:47:24.533000     
Sep 10 2014 13:47:30.030000     
Sep 10 2014 13:47:35.636000 …
Run Code Online (Sandbox Code Playgroud)

sybase jdbc sybase-ase sybase-ase-15.7

6
推荐指数
1
解决办法
4642
查看次数

PostgreSQL 中的冗余外键 - 是否有任何索引好处?

注意:这与关于在表本身中添加冗余信息的这个 SO 问题不同

以下系列语句中的最后一条语句是否在索引/查询优化方面给我带来了任何好处,还是完全没有用并且是一种反模式?从参照完整性的角度来看,它是无用的,但在索引或查询处理速度方面是否有一些好处,例如,JOIN仅在“子”表和“祖父”表之间?

CREATE TABLE grandfather (i INTEGER);
ALTER TABLE  grandfather ADD PRIMARY KEY (i);

CREATE TABLE father  (i, j INTEGER);
ALTER TABLE  father ADD PRIMARY KEY (i, j);
ALTER TABLE  father ADD CONSTRAINT father_2_grandfather FOREIGN KEY (i) REFERENCES grandfather(i);

CREATE TABLE child (i, j, k INTEGER);
ALTER TABLE  child ADD PRIMARY KEY (i, j, k);
ALTER TABLE  child ADD CONSTRAINT child_2_father      FOREIGN KEY (i, j) REFERENCES father(i, j);
-- is the below statement totally …
Run Code Online (Sandbox Code Playgroud)

postgresql

5
推荐指数
1
解决办法
541
查看次数

将空结果集视为零的习惯用法

这显然是一个 SSCCE。

我有一个inventory表格,其中包含numOfItems在任何给定日期 ( inventoryDate)仓库中的物品数量( )。两者都是整数以保持简单:

CREATE TABLE inventory(inventoryDate INTEGER, numOfItems INTEGER);
ALTER TABLE inventory ADD PRIMARY KEY (inventoryDate);
Run Code Online (Sandbox Code Playgroud)

现在我有一些条目:

INSERT INTO inventory(inventoryDate, numOfItems) VALUES(1,250),(2,275)
Run Code Online (Sandbox Code Playgroud)

上面说的是,1仓库里按时有250件物品,按时2有275件。

现在我想测试一下,在最近的日期,仓库中的物品数量是否超过了 1000:

SELECT 1000<(SELECT numOfItems FROM inventory ORDER BY inventoryDate DESC LIMIT 1)
Run Code Online (Sandbox Code Playgroud)

以上似乎有效。但是,在inventory表中根本没有条目的边缘情况下,它不起作用:

DELETE FROM inventory;
SELECT 1000<(SELECT numOfItems FROM inventory ORDER BY inventoryDate DESC LIMIT 1)
Run Code Online (Sandbox Code Playgroud)

...返回:

?column?
(null)
Run Code Online (Sandbox Code Playgroud)

我想将根本没有条目的边缘情况视为表示零 (0) 项。我知道我总是可以inventory用一个值为 0 的假第一个条目来初始化表,但就像我说的这是一个 SSCCE(在我的真实情况下,这个表确实是一个我不想修改的视图)。

所以我最终编写了这样的查询:

WITH cte AS …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.1

5
推荐指数
1
解决办法
1388
查看次数

Postgresql - Sybase 概念对应

下图很好地描述了 PostgreSQL 的主要概念:

在此处输入图片说明

我发现自己必须使用 Sybase ASE 15,我想知道 Sybase 中有哪些类似的概念。例如,从我目前所了解的情况来看,Sybase 缺乏模式的概念。所以一些问题是:

  • Sybase ASE 15 有模式的概念吗?
  • 参照完整性约束的边界是什么?例如,在 PostgreSQL 中,您可以跨模式(但不能跨数据库)使用外键。Sybase ASE 15 是什么情况?

sybase

5
推荐指数
1
解决办法
561
查看次数