标签: postgresql-11

Win 10 Postgresql 11数据库集群初始化失败

我从戴尔(XPS 15)那里购买了带有Windows 10 Pro的新笔记本电脑。我在安装postgres时始终遇到相同的问题“运行安装后步骤时出现问题。安装可能无法正确完成。数据库集群初始化失败。” 。

我尝试了过去线程的许多解决方案:不将postgres安装到progam文件中,创建一个名为postgres的用户,该用户具有对postgress目录的完全访问权限,在此说明https://www.youtube.com/watch?v=pS_zWDDDSe0 检查是否有新的win-更新关闭Windows的防火墙和防病毒功能。

运行cscript时出错// NoLogo“ C:\ develop \ postgres / installer / server / initcluster.vbs”“ NT AUTHORITY \ NetworkService”“ postgres”“ ****”“ C:\ develop \ postgres”“ C:\ develop \ postgres \ data“ 5432” DEFAULT“ 0:程序以错误退出代码结束。运行安装后步骤时出现问题。安装可能无法正确完成数据库集群初始化失败。[14:03:49]删除临时脚本目录...创建菜单快捷方式...执行cscript // NoLogo“ C:\ develop \ postgres \ installer \ server \ createshortcuts_clt.vbs”“ PostgreSQL 11”“ C:\ developer \ postgres“脚本退出代码:0

编辑错误日志

Executing batch file 'radAD31B.bat'...
The program "postgres" was found by "C:/develop/postgres/bin/initdb.exe" but was not the same version as initdb.
Run Code Online (Sandbox Code Playgroud)

windows postgresql-11

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

获取分区表的表大小(Postgres 10+)

每周Postgres上遇到这个查询,它以字节为单位显示表、它们的大小、toast 大小和索引大小:

SELECT
  relname AS table_name,
  pg_size_pretty(pg_total_relation_size(relid)) AS total,
  pg_size_pretty(pg_relation_size(relid)) AS internal,
  pg_size_pretty(pg_table_size(relid) - pg_relation_size(relid)) AS external,
  pg_size_pretty(pg_indexes_size(relid)) AS indexes
FROM pg_catalog.pg_statio_user_tables 
ORDER BY pg_total_relation_size(relid) DESC;
Run Code Online (Sandbox Code Playgroud)

我知道 Postgres 正在为每个分区创建一个表,所以我分别为每个分区获取条目,但是有没有办法为每个表获取一行,无论该表是否分区?

postgresql postgresql-10 postgresql-11

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

插入时Postgresql EXCLUDE约束不触发ON CONFLICT

我已经定义了这个表:

CREATE TABLE market.price_history (
    item_id bigint NOT NULL,
    valid_time tstzrange DEFAULT tstzrange(now(), 'infinity'),
    sale_price money NOT NULL,
    promo_code bool NOT NULL DEFAULT false,
    EXCLUDE USING gist(item_id WITH =, valid_time WITH &&),
    EXCLUDE USING gist(item_id WITH =, sale_price WITH =, valid_time WITH &&)
);
Run Code Online (Sandbox Code Playgroud)

但是当我执行此 SQL 时:

WITH new_row_valid_time as(
    SELECT tstzrange(MAX(upper(valid_time)), 
                     'infinity'::timestamptz) as adjacent_valid_time 
    FROM market.price_history 
    WHERE item_id = 11
)
INSERT INTO market.price_history as ph
(item_id, valid_time, sale_price, promo_code)
VALUES(11,                        -- same id as existent row
       (SELECT adjacent_valid_time …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-11 exclusion-constraint

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

在PostgreSQL中找不到函数

我在PostgreSQL 11.2中创建了一个用户定义的函数,如下所示。它基本上将值插入到两个不同的表中:

CREATE OR REPLACE FUNCTION public.insertTest(
IN ID1 integer, 
IN Value1 character varying,
IN Value2 character varying,
IN Value3 character varying,
IN Status character varying,
IN Active_Flag integer, 
IN Stuff1 smallint,
IN stuff2 smallint)
RETURNS void
LANGUAGE 'plpgsql'

AS $BODY$
BEGIN

Insert into TableA 
(TA_ID,
 TA_Value1, 
 TA_Value2,
 TA_Value3, 
 TA_Value4,
 TA_Time, 
 TA_Flag)
values 
(ID1,
 Value1, 
 Value2,
 Value3, 
 Status,
 now(), 
 1);

Insert into TableB
(TA_ID,
 TB_ID,      Confidence,     Sev_Rate, 
 Last_Update_Time,   TB_Flag)
values
(currval('tablea_t_id_seq'), --TableA has an auto-increment field
 Active_Flag,    Stuff1,     Stuff2,
 now(), …
Run Code Online (Sandbox Code Playgroud)

postgresql types casting user-defined-functions postgresql-11

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

从postgres函数/过程/触发器执行Bash脚本(Shell脚本)

CREATE or replace FUNCTION test() RETURNS boolean AS $$
$filename = '/home/postgres';
if (-e $filename) { 
exec /home/postgres/test.sh &
return true; }
return false;
$$ LANGUAGE plperlu;
Run Code Online (Sandbox Code Playgroud)

exec /home/postgres/test.sh及其显示的语法错误。您能帮忙如何将bash脚本调用到postgres函数/过程中吗

postgresql bash perl centos postgresql-11

3
推荐指数
1
解决办法
324
查看次数

按日期范围分区 PostgreSQL 扫描所有分区

我有一个每月分区的表(时间戳列)。

查询数据时,explain 显示当我使用日期函数构建日期时,所有分区都被查询,而当我使用硬编码日期时,仅扫描目标分区。

所以当这样查询时:

SELECT * FROM vw_comments 
      WHERE created >= '2019-4-1'
        AND created <= '2019-4-30'
limit 100;
Run Code Online (Sandbox Code Playgroud)

它只扫描 1 个分区(1 个月,很好!)但是为了让它更动态,我传递了这样的东西(简化)

SELECT * FROM vw_comments 
      WHERE created >= (date_trunc('month', now()))::timestamp
        AND created <= (date_trunc('month', now() + interval '1 month') - interval '1 day') ::timestamp
limit 100;
Run Code Online (Sandbox Code Playgroud)

上述日期方法与第一个查询的日期完全相同,但 EXPLAIN 显示所有分区都被扫描。

如何使它工作?

编辑:添加表定义并解释

应@a_horse_with_no_name 的要求,我添加了实际表并进行了解释。这样做后,我想出了更多的东西:进行联接时,动态日期不起作用。因此,在下面的查询中省略“用户”表可以使动态日期起作用。

CREATE TABLE public.comments
(
    comment_id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
    comment_id …
Run Code Online (Sandbox Code Playgroud)

postgresql database-partitioning postgresql-11

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

PostgreSQL 程序不存在

我已经创建了插入新记录的过程

CREATE OR REPLACE PROCEDURE PUBLIC."saveStudent"(
    "fName_val" character varying,
    "sName_val" character varying,
    patr_val character varying,
    "DoB_val" DATE,
    GROUP_ID INTEGER,
    instructor_id INTEGER)
LANGUAGE 'plpgsql'

AS $BODY$ BEGIN
 INSERT INTO PUBLIC.student(
    "fName", "sName", "patronymic", "DoB", "group", instructor)
    VALUES (fName_val, sName_val, patr_val, DoB_val, GROUP_ID,instructor_id);
END; $BODY$
Run Code Online (Sandbox Code Playgroud)

但是当我尝试调用它时出现错误

CALL public.saveStudent(
    'It', 
    'is', 
    'Test', 
    '23/09/1999', 
    0, 
    1
)
Run Code Online (Sandbox Code Playgroud)

过程 savestudent(未知,未知,未知,未知,整数,整数)不存在

是什么原因造成的呢?

sql postgresql postgresql-11 postgresql-12

3
推荐指数
1
解决办法
7443
查看次数

pg_get_serial_sequence 返回错误:关系“---”的列“---”不存在

使用 Postgres 11.5,我尝试手动将一些数据(具有特定键值)插入到具有 SERIAL PRIMARY KEY 字段的表中,然后调整 SERIAL 主键字段的顺序以返回高于当前最大值的值价值。但我收到错误。这是一个简单的表格

CREATE TABLE FOO (
  FOO_ID SERIAL PRIMARY KEY,
  VAL     INTEGER
);

INSERT INTO FOO (VAL) VALUES (4);
SELECT * FROM FOO;
-- returns one record with a FOO_ID of 1, as expected

INSERT INTO FOO (FOO_ID, VAL) VALUES (5, 5);
SELECT * FROM FOO WHERE VAL=5;
-- returns one record with a FOO_ID of 5, as expected
Run Code Online (Sandbox Code Playgroud)

接下来,我想更新序列,以便接下来的几次没有显式 FOO_ID 的插入不会与 ID 为 5 的插入发生冲突:

SELECT setval(pg_get_serial_sequence('FOO', 'FOO_ID'), (SELECT COALESCE(MAX(FOO_ID), 0) FROM …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-11

3
推荐指数
1
解决办法
1858
查看次数

在 Postgres 上选择 Distinct(不区分大小写)

之前已经在这里和其他一些地方问过这个问题,但似乎建议的答案不适用于 postgres 或者在这种情况下不起作用。

我正在寻找不同的列名称,例如:

SELECT DISTINCT column_name FROM table_name WHERE ... ORDER BY column_name但是我希望消除区分大小写的重复项(例如Aa应该被视为同一件事)

我尝试过COLLATE,但所有可用的格式都区分大小写。LOWER()通过OR更改案例UPPER()将不起作用,因为在这种情况下我需要案例信息。

我想过这样的事情来获取独特的价值,但仍然保持这种情况:

SELECT DISTINCT upper(my_column) as upper_case, my_column
FROM my_table
ORDER BY upper(my_column)
Run Code Online (Sandbox Code Playgroud)

但是在不同的查询中引入 my_column 就否定了整个事情。

如何在不修改结果本身大小写的情况下获得唯一值(不区分大小写)?

sql postgresql postgresql-11

3
推荐指数
1
解决办法
2968
查看次数

如何在postgresql中更改分区

实际上我是 PostgreSQL 的新手。我想更改现有分区以增加范围值。例如我有以下分区

PQR_271 对于从 ('260000000') 到 ('270000000') 的值

在这里,我想将范围扩展到最大值,但我无法这样做。

我尝试了下面的解决方案

CREATE TABLE public.PQR_272 PARTITION OF public.stats_to_institution FOR VALUES FROM ('270000000') TO ('280000000');
ALTER TABLE public.PQR_272 OWNER to usr_replica;
Run Code Online (Sandbox Code Playgroud)

这里我可以增加整数值,但不能增加到最大值。有没有办法将范围设置为最大值?

PostgreSQL 版本11

postgresql database-partitioning postgresql-11

3
推荐指数
1
解决办法
8681
查看次数