我有一个"customer_config"包含这些列的表:
company (varchar)
warehouse (numeric)
section (numeric)
config_keyword (varchar)
config_value (varchar)
Run Code Online (Sandbox Code Playgroud)
这两config_*列可以应用于整个公司(warehouse和section为空)、公司内的整个仓库(section为空)或仓库内的一个部分。
因此,我们可以为公司设置一个默认行,然后使用一个或多个行来覆盖特定仓库或仓库和部分的配置值。
我只想返回给定公司、仓库和部门的最具体的行。像这样的伪代码:
results = select * from customer_config where (all match)
if results empty
results = select * from customer_config where (company_code and warehouse match)
if results empty
results = select * from customer_config where (company_code matches)
Run Code Online (Sandbox Code Playgroud)
最具体的行应优先。
同一级别上可以有多个相同的条目config_keyword。
是否也可以为单个关键字返回多行?
是否可以在 Windows 上启用自动完成功能psql?据我从 Linux 用户那里了解到,他们可以使用按键TAB来自动完成,我想这非常方便。
这里有一些可以使用的数据:
CREATE TABLE a (
a_id int NOT NULL,
a_prop text NOT NULL
);
CREATE TABLE b (
b_id int NOT NULL,
b_prop text NOT NULL
);
INSERT INTO a VALUES (1, 'blah'), (2, 'blah'), (4, 'not this one');
INSERT INTO b VALUES (1, 'blah'), (3, 'blah'), (5, 'not this one');
Run Code Online (Sandbox Code Playgroud)
现在我想编写一个返回的查询:
一种可能性是:
SELECT *
FROM a
FULL OUTER JOIN b ON a_id = b_id
WHERE (a_prop = 'blah' OR a_prop IS NULL)
AND (b_prop = 'blah' OR b_prop IS …Run Code Online (Sandbox Code Playgroud) 想象一下我有一个看起来像这样的结果集:
+----+------------+------------+
| Id | Date_One | Date_Two |
+----+------------+------------+
| 1 | 2022-05-12 | null |
| 2 | 2022-05-13 | 2022-05-11 |
| 3 | null | 2022-05-14 |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)
我想首先根据最早的日期对结果进行排序,而不考虑列。每行将有一个Date_One或Date_Two填充。它们永远不会都为空。
因此上述结果集的结果将是:
+----+------------+------------+
| Id | Date_One | Date_Two |
+----+------------+------------+
| 2 | 2022-05-13 | 2022-05-11 |
| 1 | 2022-05-12 | null |
| 3 | null | 2022-05-14 |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)
(因为 Id 2Date_Two早于 Id 1 Date_One)。
我不确定如何创建我的ORDER …
我正在尝试使用虚拟数据生成虚拟表,以测试某些 SQL 任务的性能。
基于这个旧线程:有没有办法将多行插入到所有列都有默认值的表中?
我注意到,对于类型IDENTITY,不再可能使用建议的generate_series(1, N)解决方案用虚拟数据填充表。
那么,如何将 1'000 个虚拟数据插入到下表 (PG 14) 中,从而利用字段的默认值name而不覆盖字段的系统值id:
CREATE TABLE foo (
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name TEXT DEFAULT md5(random()::text)
);
Run Code Online (Sandbox Code Playgroud)
尝试以下操作失败:
INSERT INTO foo (id)
SELECT generate_series(1, 1000);
-- which results in:
ERROR: cannot insert a non-DEFAULT value into column "id"
DETAIL: Column "id" is an identity column defined as GENERATED ALWAYS.
HINT: Use OVERRIDING SYSTEM VALUE to override.
SQL state: 428C9 …Run Code Online (Sandbox Code Playgroud) DB用于存储市场报价,因此一天丢失数据是可以接受的。
所有写入操作均通过单个连接在一天的固定时间连续执行。
每天增加的数据量约为2GB。
由于预算削减,物理存储设备不得不从SSD改为传统硬盘,写入时间从10分钟改为2小时以上。
我应该如何调整 PG 配置以进行写入,尤其是使用传统硬盘?
环境:Ubuntu服务器20.04,Postgresql-11,CPU 4核,RAM 8G,写入时不需要做任何其他事情。
我需要CREATE MATERIALIZED VIEW ... WITH DATA从函数/过程执行,但我得到了ERROR: CREATE MATERIALIZED VIEW ... WITH DATA cannot be executed from a function.
除了使函数返回创建查询文本并复制粘贴以执行它之外,还有其他解决方法吗?
看起来真的很傻,但我想这背后有一个很好的理由......无论如何,这个限制有什么解决方法吗?
我正在运行 postgresql 15。
postgresql stored-procedures materialized-view functions postgresql-15
Postgresql 版本:15 备份是从版本 12 开始的。
(我不知道 --schema-only 是否是问题的一部分。)
我有一个数据库的备份 tar 文件,我正在尝试恢复它,但我一直遇到奇怪的冲突。
如果我预先创建数据库weatherdata并尝试使用该--create选项,则会收到数据库已存在的预期错误。
postgres@logs:~$ pg_restore -e --create --schema-only -U postgres -d weatherdata /home/geuis/postgres-bak-3-31-22.tar
pg_restore: error: could not execute query: ERROR: database "weatherdata" already exists
Command was: CREATE DATABASE weatherdata WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';
Run Code Online (Sandbox Code Playgroud)
但是如果我删除数据库然后运行相同的命令,它会抱怨weatherdata 不存在
postgres=# DROP DATABASE weatherdata;
DROP DATABASE
postgres=# exit
postgres@logs:~$ pg_restore -e --create --schema-only -U postgres -d weatherdata /home/geuis/postgres-bak-3-31-22.tar
pg_restore: error: connection …Run Code Online (Sandbox Code Playgroud) 我有一个 Laravel 应用程序需要存储最小和最大权重。目前,我们使用整数值来存储数据,但我需要修改它以使用浮点存储数据值。为了获得良好的准确性,我必须使用什么数据类型?
我有一个 PostgreSQL 表设置作为队列/事件源。
我非常希望保留事件的“顺序”(即使在处理队列项之后)作为 e2e 测试的来源。
我开始遇到查询性能下降的问题(可能是因为表膨胀),并且我不知道如何有效地查询不断变化的键上的表。
Postgres:v15
CREATE TABLE eventsource.events (
id serial4 NOT NULL,
message jsonb NOT NULL,
status varchar(50) NOT NULL,
createdOn timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT events_pkey PRIMARY KEY (id)
);
CREATE INDEX ON eventsource.events (createdOn)
Run Code Online (Sandbox Code Playgroud)
BEGIN; -- Start transaction
SELECT message, status
FROM eventsource.events ee
WHERE status = 'PENDING'
ORDER BY ee.createdOn ASC
FOR UPDATE SKIP LOCKED
LIMIT 10; -- Get the OLDEST 10 events that are pending
-- I …Run Code Online (Sandbox Code Playgroud) postgresql ×10
query ×2
event ×1
functions ×1
index ×1
join ×1
optimization ×1
order-by ×1
pg-restore ×1
precedence ×1
psql ×1
queue ×1
syntax ×1