我从戴尔(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) 我每周在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 正在为每个分区创建一个表,所以我分别为每个分区获取条目,但是有没有办法为每个表获取一行,无论该表是否分区?
我已经定义了这个表:
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) 我在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
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函数/过程中吗
我有一个每月分区的表(时间戳列)。
查询数据时,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) 我已经创建了插入新记录的过程
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(未知,未知,未知,未知,整数,整数)不存在
是什么原因造成的呢?
使用 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) 之前已经在这里和其他一些地方问过这个问题,但似乎建议的答案不适用于 postgres 或者在这种情况下不起作用。
我正在寻找不同的列名称,例如:
SELECT DISTINCT column_name FROM table_name WHERE ... ORDER BY column_name但是我希望消除区分大小写的重复项(例如A和a应该被视为同一件事)
我尝试过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 就否定了整个事情。
如何在不修改结果本身大小写的情况下获得唯一值(不区分大小写)?
实际上我是 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-11 ×10
postgresql ×9
sql ×3
bash ×1
casting ×1
centos ×1
perl ×1
types ×1
windows ×1