标签: postgresql

PostgreSQL 与 Oracle 高可用性解决方案?

PostgreSQL 有一个包含不同高可用性选项的矩阵,这些选项代表了将复制构建到 RDBMS 中的许多不同方式。

这是PostgreSQL 高可用性、负载平衡和复制功能矩阵

问题

  • Oracle 支持 PostgreSQL 高可用性矩阵中的哪些方法?
  • oracle 是否使用 PostgreSQL 不可用的技术来实现高可用性?

postgresql oracle

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

CREATE as SELECT with CONSTRAINT?

我有一块在 PostgreSQLSQL中创建了TABLE一个SELECT语句;我想向表中添加约束,例如,一列不能是null.

我在 Postgres 文档中找不到对此有效的 SQL,因此似乎不可能。

实现这种功能的最佳方法是什么?如果违反约束,我希望表的创建失败。

我无法预先创建带有约束的表,因为某些列可能存在一些变化,因为它们是动态过程的结果。

postgresql database-design constraint

8
推荐指数
2
解决办法
2765
查看次数

postgresql 从选择查询插入,加上静态值

参考如何从 PostgreSQL 中的选择查询将值插入表中?,

我想从另一个表行插入,由 SELECT DISTINCT 指定,加上一些静态值,例如:

INSERT INTO new_tbl (column1, column2, column3)
SELECT DISTINCT id FROM -- long where clause --, 
  'a string', 0;
Run Code Online (Sandbox Code Playgroud)

这样新表中的每一行都会为 column2 和 column3 获得相同的值这可能吗?

postgresql insert

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

如何将 RETURNS TABLE 与 PostgreSQL 中的现有表一起使用?

来自此处的 PostgreSQL文档

还有另一种方法可以将函数声明为返回一个集合,即使用语法 RETURNS TABLE(columns)。... 这种表示法是在 SQL 标准的最新版本中指定的,因此可能比使用 SETOF 更具可移植性。

这听起来好像RETURNS TABLE是返回多行的更新、更便携的样式。但我不确定这两种语法是否等效。

我想知道我们是否真的可以RETURNS TABLE用来代替 RETURNS SETOF

特别是,我还没有弄清楚的一种情况是:如果我们有一个现有的表foo及其关联的复合类型,我们如何在 中使用它RETURNS TABLE

使用上述链接的示例,可以使用以下内容重写RETURNS TABLE

CREATE TABLE foo (fooid int, foosubid int, fooname text);
CREATE FUNCTION getfoo(int) RETURNS SETOF foo AS $$
    SELECT * FROM foo WHERE fooid = $1;
$$ LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试使用RETURNS TABLE (foo.*)and RETURNS TABLE (foo),但没有用。

postgresql set-returning-functions postgresql-9.5

8
推荐指数
1
解决办法
6088
查看次数

仅具有索引存储的 Postgresql

我有一个带有(bigint) 和(double)的 PostgreSQL 表。该表有数百亿行。我在 ( key , value )上有一个 btree 用于按键辅助查找。该表永远不会更新。

我在这个表上执行的唯一查询是在上的相等谓词以获取相应的value,它利用了 B 树。

PostgreSQL 消耗的存储在这里很糟糕。它将OIDkeyvalue存储在表中,并将keyvalue存储在索引中。我本质上是将所有东西存储两次!

如何配置此表以节省空间?理想情况下,如何在 B 树中只存储一次元组。

postgresql performance postgresql-performance

8
推荐指数
1
解决办法
1050
查看次数

谁是“focker”,为什么他拥有我的架构?

我在 Compose.io 中有一个 Postgres DB 部署,我正在为我的应用程序使用标准的“compose”数据库。我想清除当前的数据库内容,以便可以使用新模式重新创建数据库。我已经读过,最好的方法是使用“删除模式公共级联”,但是当我尝试在我的数据库上执行此操作时,我得到了

ERROR:  must be owner of schema public
Run Code Online (Sandbox Code Playgroud)

事实证明,模式不是由admin(撰写提供 psql 访问的用户)拥有,而是由名为focker.

compose=> \dn
 List of schemas
  Name  | Owner  
--------+--------
 public | focker
(1 row)
Run Code Online (Sandbox Code Playgroud)

我尝试更改架构所有者,但失败并出现与上述相同的错误。

为什么我的数据库是这样设置的?有什么方法可以更改它以便管理员用户可以清除数据库吗?

postgresql

8
推荐指数
1
解决办法
585
查看次数

如何在分隔符之后生成所有尾随子字符串?

给定一个可能包含多个分隔符实例的字符串,我想生成从该字符开始的所有子字符串。

例如,给定一个像'a.b.c.d.e'(或 array {a,b,c,d,e},我想)这样的字符串,我想生成一个像这样的数组:

{a.b.c.d.e, b.c.d.e, c.d.e, d.e, e}
Run Code Online (Sandbox Code Playgroud)

预期用途是作为填充一列的触发器,以便在写入另一列时更容易地查询域名部分(即,查找全部q.x.t.com以进行查询t.com)。

解决这个问题似乎是一种笨拙的方法(而且很可能是),但现在我很好奇如何用(Postgres')SQL 编写这样的函数。

这些是电子邮件域名,因此很难说元素的最大可能数量是多少,但绝大多数肯定会小于 5。

postgresql pattern-matching array

8
推荐指数
2
解决办法
1100
查看次数

在 Postgres 中的多列中的任何一列上分组

是否可以在 Postgres 中创建某种分组链?假设我有以下图表:

CREATE TABLE foo AS
SELECT row_number() OVER () AS id, *
FROM ( VALUES
  ( 'X', 'D', 'G', 'P' ),
  ( 'F', 'D', 'L', 'M' ),
  ( 'X', 'N', 'R', 'S' ),
  ( 'Y', 'I', 'W', NULL ),
  ( 'U', 'Z', 'E', NULL )
) AS f(a,b,c,d);

id | a | b | c | d
------------------
 1 | X | D | G | P
 2 | F | D | L | M
 3 | …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate postgresql-9.5

8
推荐指数
2
解决办法
3768
查看次数

8
推荐指数
1
解决办法
4713
查看次数

PostgreSQL:使用自定义列自动更新 updated_at

以前,我会将多个表合并为一个并返回结果,但在许多表中我有相同的列名。这就是为什么我决定用表名作为列名的前缀。但这打破了我必须自动更新我的updated_at专栏的触发器。

这是我的功能:

CREATE OR REPLACE FUNCTION update_updated_at()
  RETURNS TRIGGER AS $$
  BEGIN
      NEW.updated_at = now();
      RETURN NEW;
  END;
  $$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

我会添加一个触发器,如:

CREATE TRIGGER update_users_updated_at
  BEFORE UPDATE ON users
  FOR EACH ROW EXECUTE PROCEDURE update_updated_at();
Run Code Online (Sandbox Code Playgroud)

但是现在我的专栏被命名了users_updated_at,这不起作用。我的问题是有什么方法可以将列名传递给触发器并更新传递的列,还是有其他我不知道的方法?

postgresql trigger plpgsql functions row-modification-time

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