标签: postgresql

PostgreSQL 能告诉我它使用的是什么配置文件吗?

我正在对配置文件进行一些更改时遇到问题。我认为 PostgreSQL 没有使用我正在修改的那些。有什么方法可以让 postgres(可能是一些环境变量)告诉我在哪里可以找到各种配置文件,包括pg_hba.confpg_ident.conf

postgresql configuration

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

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

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

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

问题

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

postgresql oracle

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

在同一查询中将日期和时间戳与时区与 now() 进行比较?

我有多个数据库服务器,我正在使用将过期列与now(). 问题是服务器的过期列之一是timestamp with time zone,其余的都是date。我无法更改此设置,因为我没有管理员访问权限,而且实际上我只是在查询视图。Postgres 对我来说相当陌生,所以我真的不明白日期和时间是如何相互配合的。

当我尝试timestamp with time zone通过将timestampa转换为 a 来查询服务器时date

...
WHERE
    (
        status_code = '30000'
        OR status_code = '30005'
    )
AND CAST(expiration AS DATE) > now()
Run Code Online (Sandbox Code Playgroud)

它有效,但在expiration已经date失败的服务器上使用相同的查询:

[Err] 错误:类型日期的无效输入语法:“无结束日期”

任何帮助将不胜感激,我真的不想硬编码这个数据库服务器的异常。

postgresql datatypes timestamp date-format

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

我可以用新的 json 字段做什么?

PostgreSQL 9.2 引入了json字段类型。为什么以及何时应该使用它?它比文本字段有什么好处?

我以为有新的查询选项可用,但我没有看到任何选项。我错过了什么吗?

postgresql postgresql-9.2 postgresql-9.3 json

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

PostgreSQL中获取两个文本数组交集长度的最快方法

这是我目前正在使用的:

CREATE FUNCTION array_intersect(a1 anyarray, a2 anyarray)
RETURNS anyarray AS
$$ 
  SELECT ARRAY(
    SELECT unnest($1)
    INTERSECT SELECT unnest($2)
    ORDER BY 1
  );
$$ LANGUAGE sql
IMMUTABLE STRICT;


--get the length:
select array_length ( array_intersect(array[...], array[...]), 1);
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法?

postgresql performance array postgresql-9.3

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

如何创建 Postgres 触发器以确保字段不可更新

我正在尝试创建一个 Postgres 触发器,以确保在设置列的值后,它无法更新(基本上使其成为只读)。到目前为止,我已经提出了以下草案触发器。

1) 首先,我在正确的轨道上吗?
2) 有回报价值NEW吗?
3) 我必须original_idNEW.?

CREATE FUNCTION check_id_change() RETURNS TRIGGER AS $$
    BEGIN
        IF OLD.original_id <> NEW.original_id THEN
            RAISE EXCEPTION 'cannot change original_id'; 
        END IF;
        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER client_update_trigger AFTER UPDATE ON client FOR EACH ROW
      EXECUTE PROCEDURE check_id_change();
Run Code Online (Sandbox Code Playgroud)

postgresql trigger

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

Postgres 查询以将 JSON 对象键作为数组返回

是否可以将 JSON 对象键作为 PostgreSQL 中的值数组返回?

在 JavaScript 中,这只是Object.keys(obj),它返回一个字符串数组。

例如,如果我有一张这样的表:

tbl_items
---------
id bigserial NOT NULL
obj json NOT NULL
Run Code Online (Sandbox Code Playgroud)

如果有这样的一行:

id      obj
-----   -------------------------
123     '{"foo":1,"bar":2}'
Run Code Online (Sandbox Code Playgroud)

我怎样才能有一个查询返回:

id      keys
-----   ------------------
123     '{"foo","bar"}'
Run Code Online (Sandbox Code Playgroud)

postgresql array json postgresql-9.4

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

PostgreSQL 在查询 INSTEAD OF 触发器时使用 NEW

我无法让 INSTEAD OF 触发器正常工作,而且我想我误解了如何使用 NEW。考虑以下简化场景:

CREATE TABLE Product (
  product_id SERIAL PRIMARY KEY,
  product_name VARCHAR
);
CREATE TABLE Purchase (
  purchase_id SERIAL PRIMARY KEY,
  product_id INT REFERENCES Product,
  when_bought DATE
);

CREATE VIEW PurchaseView AS
SELECT purchase_id, product_name, when_bought
FROM Purchase LEFT JOIN Product USING (product_id);
Run Code Online (Sandbox Code Playgroud)

我希望能够创建INSTEAD OF触发器以允许我直接插入到 中PurchaseView,例如:

INSERT INTO Product(product_name) VALUES ('foo');
INSERT INTO PurchaseView(product_name, when_bought) VALUES ('foo', NOW());
Run Code Online (Sandbox Code Playgroud)

我的想法是这样的:

CREATE OR REPLACE FUNCTION insert_purchaseview_func()
  RETURNS trigger AS
$BODY$
BEGIN
  INSERT INTO Purchase(product_id, when_bought) …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger syntax plpgsql

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

如何使用数据类型的默认值作为列默认值?

如何为 DDL 中的列指定默认值?我很确定以下方法不久前有效:

CREATE TABLE test
(
  col_1 CHAR(12) NOT NULL,
  col_2 INTEGER  NOT NULL WITH DEFAULT,
  col_3 CHAR(12) NOT NULL WITH DEFAULT
);
Run Code Online (Sandbox Code Playgroud)

我只想定义 DB 应该使用列数据类型的默认值(就像我上面的例子一样),而不是具体指定哪个值。

postgresql database-design datatypes ddl

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

当主键也是外键时,在 Postgres

在 Postgres 12 中,我正在跟踪照片。每个都很大,每个大约 6 到 8 兆。为了快速浏览,我将与完整图像一起存储缩略图。full 和thumbnail 都是 BYTEA 类型的列。

为了性能,我想避免在只需要缩略图时加载完整图像。据我了解,访问一行时,所有 BYTEA 字段值都将加载到内存中。因此,即使在查询中没有明确请求,向用户显示缩略图列表也必然会在服务器上加载完整的照片。

因此,我将把照片表分成两部分,将缩略图存储在主表中,并将缩略图存储在单独的子表中,以一对一的方式。

在这种情况下,子全图表携带其父缩略图行的 ID 作为外键。该外键列在逻辑上也可以用作主键。

我可以指定子项的一列既是外键又是主键吗?如果是这样,是否有任何需要注意的注意事项?

postgresql foreign-key primary-key

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