根据文档(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) 我试图在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
在PostgreSQL 11 发行说明中,我发现了对分区功能的以下改进:
我需要此功能并进行了测试。
创建表:
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不起作用。
也许我做错了。也许有人尝试了此功能并知道它是如何工作的。也许有人知道解决方法,除了在应用程序中实现约束。
嗨,我正在使用 Postgres 11 和 pgadmin 4.1。我有一个 SQL 文件,我试图将其导入到 pgadmin 4 中新创建的数据库中。
我知道这是一个普遍的错误,但我尽力解决它,但对我不起作用。
这是错误:

下面是一些 SQL 文件行。

我在为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)
但是,构建失败:
任何建议将不胜感激。
如何在 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) 这是模型和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 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 中的选项来忽略错误页面但完成后面或任何其他解决方案。
我正在使用 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'这是一个表达,这就是故事的结局?
我可以看到两种解决方法,但其中没有一个对我有吸引力:
data->>'variantCode'索引键的一部分第二个选择有多糟糕?最终目标是在以下查询中
进行仅索引扫描:
SELECT data->>'variantCode', ARRAY_AGG(product_sku)
FROM products
GROUP BY data->>'variantCode'
Run Code Online (Sandbox Code Playgroud) postgresql-11 ×10
postgresql ×7
indexing ×2
pg-dump ×2
pgadmin-4 ×2
commit ×1
database ×1
jsonb ×1
plpgsql ×1
sequelize.js ×1
sql ×1
transactions ×1
travis-ci ×1