标签: postgresql-11

尝试使用嵌套事务控制执行过程时出现“错误:无效事务终止”

根据文档(https://www.postgresql.org/docs/current/app-psql.html),即使AUTOCOMMIT设置为关闭,PSQL 也会BEGIN在尚未位于事务块中的任何命令之前发出隐式命令本身不是一个BEGIN或其他事务控制命令,也不是不能在事务块内执行的命令,例如VACUUM. (不幸的CALL是,与 的处理方式不同VACCUM)。而且,根据 Shaun Thomas ( https://blog.2ndquadrant.com/pg-phriday-stored-procedures-postgres-11/ ) 的说法,发生无效交易终止错误是因为无法关闭当前交易(在此情况下)情况是由 PSQL 启动的)在过程中。我尝试了所有与事务控制相关的PSQL设置,但都出现无效事务终止错误;即使 PSQL 处理的命令文件仅包含该CALL语句。

这是我调用的程序:

create or replace procedure producto$cargar_imagenes(_super$ bigint, _archivo$ character varying) as $$
declare
    _msg character varying;
    _log rastro_proceso%ROWTYPE;
begin
    perform rastro_proceso_temporal$insert(_super$);
    perform producto$cargar_imagenes$biz(_super$, _archivo$);
    if (_super$ is not null and _super$ > 0) then
        perform producto$cargar_imagenes$log(_super$, _archivo$);
    else
        perform tarea_usuario$private$update(6519204281880642486, null);
    end if;
    commit;
end;
$$ language plpgsql set search_path …
Run Code Online (Sandbox Code Playgroud)

postgresql transactions commit plpgsql postgresql-11

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

PostgresSQL / pgAdmin4 /转储服务器版本不匹配

我试图在pgAdmin4中使用Postgres 11.1进行备份,但是失败了。pgadmin显示了一个带有

状态:失败(退出代码:1)。

pg_dump:服务器版本:11.1; pg_dump:10.5

pg_dump:由于服务器不匹配而中止

我不太了解 pgadmin4是否不知道我使用的是11.1而不是10.5?

解决的问题-以我为例。

pgadmin <首选项<路径<二进制路径

PostgreSQL二进制路径自动设置为 $DIR/../runtime

我将路径更改为已安装的PostgreSQL版本 C:\Program Files\PostgreSQL\11\bin

database postgresql pgadmin-4 postgresql-11

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

分区表上的PostgreSQL 11外键

在PostgreSQL 11 发行说明中,我发现了对分区功能的以下改进:

  • 添加对分区表上的PRIMARY KEY,FOREIGN KEY,索引和触发器的支持

我需要此功能并进行了测试。

创建表:

CREATE TABLE public.tbl_test
(
    uuid character varying(32) NOT null,
    registration_date timestamp without time zone NOT NULL    
)
PARTITION BY RANGE (registration_date);
Run Code Online (Sandbox Code Playgroud)

尝试创建主键:

ALTER TABLE public.tbl_test ADD CONSTRAINT pk_test PRIMARY KEY (uuid);
Run Code Online (Sandbox Code Playgroud)

我收到错误SQL错误[0A000]。如果使用复合PK(uuid,registration_date),则可以使用。因为PK包含分区列

结论:在分区表中创建PK有限制(PK需要包含分区列)。

尝试创建外键

CREATE TABLE public.tbl_test2
(
    uuid character varying(32) NOT null,
    test_uuid character varying(32) NOT null
);

ALTER TABLE tbl_test2
   ADD CONSTRAINT fk_test FOREIGN KEY (test_uuid)
   REFERENCES tbl_test (uuid);
Run Code Online (Sandbox Code Playgroud)

我收到错误SQL错误[42809]。这意味着分区表上的FOREIGN KEY不起作用。

也许我做错了。也许有人尝试了此功能并知道它是如何工作的。也许有人知道解决方法,除了在应用程序中实现约束。

database-partitioning postgresql-11

5
推荐指数
2
解决办法
2466
查看次数

pgadmin 4 pg_restore: [archiver] 输入文件似乎是文本格式的转储。请使用 psql

嗨,我正在使用 Postgres 11 和 pgadmin 4.1。我有一个 SQL 文件,我试图将其导入到 pgadmin 4 中新创建的数据库中。

我知道这是一个普遍的错误,但我尽力解决它,但对我不起作用。

这是错误:

在此处输入图片说明

下面是一些 SQL 文件行。

在此处输入图片说明

pg-dump pgadmin-4 postgresql-11

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

Travis CI未连接到PostgreSQL 11.2

我在为PostgreSQL 11.2数据库构建Rails应用程序时遇到麻烦。

这是.travis.yml文件:

rvm:
  - 2.6.1
dist: xenial
services:
  - postgresql
addons:
  postgresql: "11.2"
  apt:
    packages:
      - postgresql-11
before_script:
  - psql --version
  - psql -c 'create database kpdotcom_test;' -U postgres
  - cp config/database.yml.travis config/database.yml
  - bundle exec rake db:schema:load
Run Code Online (Sandbox Code Playgroud)

但是,构建失败:

在此处输入图片说明

任何建议将不胜感激。

ruby-on-rails travis-ci postgresql-11

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

如何在分区的表上创建索引?

如何在 PostgreSQL 11.2 的分区表上创建索引?

我的表是:

CREATE TABLE sometablename
(
    column1 character varying(255) COLLATE pg_catalog."default" NOT NULL,
    column2 integer NOT NULL,
    column3 character varying(255) COLLATE pg_catalog."default" NOT NULL,
    "timestamp" timestamp without time zone NOT NULL,
    avg_val double precision,
    max_val double precision,
    min_val double precision,
    p95_val double precision,
    sample_count double precision,
    sum_val double precision,
    unit character varying(255) COLLATE pg_catalog."default",
    user_id bigint NOT NULL,
    CONSTRAINT testtable_pkey PRIMARY KEY (column1, column2, column3, "timestamp", user_id)
)
PARTITION BY HASH (user_id) 
    WITH (
    OIDS = FALSE …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing database-partitioning postgresql-11

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

JSONB 数组上的 Sequelize 查询

这是模型和postgres数据库中的 JSONB 数组数据类型:

.
.
.
      MyField: {
        type: DataTypes.ARRAY(DataTypes.JSONB),
        allowNull: false
      }
.
.
.
Run Code Online (Sandbox Code Playgroud)

表字段包含 JSONB 值:

{"{\"LessonId\": \"1\", \"TeacherId\": \"1\"}"}
Run Code Online (Sandbox Code Playgroud)

这是我在sequelize findAll 方法中的where 子句:

      where: {
        MyField: {
          [Op.contains]: [
            {
              TeacherId: '1',
            }
          ]
        }
      }
Run Code Online (Sandbox Code Playgroud)

生成的查询是这样的:

SELECT
    ...
    "MyField",
FROM
    "MyTable" AS "MyTable" 
WHERE
    "MyTable"."MyField" @> ARRAY [ '{"TeacherId":"1"}' ]:: JSONB [];
Run Code Online (Sandbox Code Playgroud)

并且结果集是空的。但当我LessonId也包括在内时,它就会完成我的回答。我发现 postgres 将 jsonb 对象视为字符串文本。根据 JSONB ARRAY 中的特定键进行查询的正确方法是什么?

postgresql sequelize.js jsonb postgresql-11

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

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

Postgresql pg_dump 对于“块中无效页”数据库无法正常工作

我们在系统上设置了数据库 postgresql 11。大约有8张桌子。这几天我们就面临这个问题

ERROR: invalid page in block 9698 of relation base/16385/16560 SQL state: XX001
Run Code Online (Sandbox Code Playgroud)

根据我的研究,我们应该着手set zero_damaged_pages=on;解决这个问题。我们设置并执行了一些运行良好的选择查询。然后我们决定通过 pg_dump 备份该数据库。此作业未成功完成,但复制了所有记录。

现在,在新系统上,我们导入了备份,我们发现由于发生了数据重复,数据库模式未正确复制到此处。我们用另一个没问题的数据库重复了这个操作。一切正常,包括恢复。

最后,我得出的结论是,由于页面块中的错误,数据库没有正确备份。是否有任何类似set zero_damaged_pages=on;pg_dump 中的选项来忽略错误页面但完成后面或任何其他解决方案。

sql postgresql pg-dump postgresql-11

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

是否可以使用 json Include Columns 创建 PostgreSQL 索引?

我正在使用 PostgreSQL 11.8

CREATE INDEX ix_products_product_sku_with_json_columns
ON products USING btree((product_sku))
INCLUDE ((data->>'variantCode'));
Run Code Online (Sandbox Code Playgroud)

错误:包含的列不支持
表达式 SQL 状态:0A000

文档说:

不支持将表达式作为包含列,因为它们不能在仅索引扫描中使用。

我想data->>'variantCode'这是一个表达,这就是故事的结局?
我可以看到两种解决方法,但其中没有一个对我有吸引力:

  • 在表中创建专用的 VariantCode 常规 SQL 列
  • 作为data->>'variantCode'索引键的一部分

第二个选择有多糟糕?最终目标是在以下查询中
进行仅索引扫描:

SELECT data->>'variantCode', ARRAY_AGG(product_sku)
FROM products
GROUP BY data->>'variantCode'
Run Code Online (Sandbox Code Playgroud)

postgresql indexing postgresql-11

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