从我当前的查询中,我获得了这个 jsonb 数据:
values: "a1", ["b1", "b2"]
Run Code Online (Sandbox Code Playgroud)
我只想将它压平在一个级别上,如下所示:
values: "a1", "b1", "b2"
Run Code Online (Sandbox Code Playgroud)
这是在查询中获取数据的简化方法(只有 2 个级别是可能的,永远不会更多):
SELECT *
FROM jsonb_array_elements('{"test": ["a1", ["b1", "b2"]]}'::jsonb->'test');
Run Code Online (Sandbox Code Playgroud)
我尝试使用 jsonb_array_elements 但我的问题是:我不知道它是否是一个 json 数组!不是 SQL 专家,我没有找到一种方法来编写类似的代码:
SELECT
IF (is_json_array(list))
jsonb_array_elements(list)
ELSE
list
ENDIF
FROM jsonb_array_elements('{"test": ["a1", ["b1", "b2"]]}'::jsonb->'test');
Run Code Online (Sandbox Code Playgroud)
对于我当前数据的“缩小”视图,这是一个无表工作测试:
with recursive search_key_recursive (jsonlevel) as(
values ('{"fr": {"WantedKey": "a1", "Sub": [{"WantedKey": ["b1", "b2"]}], "AnotherSub": [{"WantedKey": "c1"}]}}'::jsonb)
union all
select
case jsonb_typeof(jsonlevel)
when 'object' then (jsonb_each(jsonlevel)).value
when 'array' then jsonb_array_elements(jsonlevel)
end as jsonlevel
from search_key_recursive where jsonb_typeof(jsonlevel) in ('object', …Run Code Online (Sandbox Code Playgroud) 我当前的数据库uat作为 owner postgres。但现在我想设置具有正确权限的角色和用户。一些简单的东西,比如:
角色:dba,developer,application
用户: dba1, dev1, dev2,app1
哪里dba可以在数据库上做任何事情以进行管理;developer可以进行SELECT,UPDATE和INSERT, 通常的开发人员操作;app1与developer角色相同的操作,暂时。
我怎样才能正确地做到这一点?production在这个新设置中,谁应该是我表的所有者?
更新:
------------------------
-- INITIAL SETUP
------------------------
-- create uat database
create database uat;
-- dba role
create role dba with superuser createdb createrole nologin replication bypassrls;
-- dev role
create role dev with nosuperuser nocreatedb nocreaterole nologin noreplication nobypassrls; …Run Code Online (Sandbox Code Playgroud) 我有一张桌子:
CREATE TABLE methods
(
method_id serial PRIMARY KEY,
method_name varchar(100)
);
Run Code Online (Sandbox Code Playgroud)
我现在想创建一个包含以下列的表:
CREATE TABLE experiments
(
method integer[] REFERENCES methods(method_id),
trials integer
);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
键列“method”和“method_id”是不兼容的类型:整数[]和整数。
我知道列必须是相同的类型,我还看到有些人已经尝试在数组问题上解决这个外键:
PostgreSQL 9.3 开发:Array ELEMENT 外键
我的兴趣是 'method' 应该是一个整数数组,引用来自表 'methods' 的 'method_id',但我无法弄清楚。我认为上面的链接可能是一个解决方案,但似乎没有实现(?)
一些帖子建议使用连接/连接表:
我是一个绝对的初学者,我还无法弄清楚。对我来说,首先要了解如何解决数组上的外键问题。可以将多个方法视为形成一类方法。每个班级可以有一定数量的试验。
我正在尝试将中文字符粘贴到 psql 终端中:
$ psql
=> \encoding
=> UTF8
# Ctrl+v (?????)
=> ???????
Run Code Online (Sandbox Code Playgroud)
粘贴到普通终端(Max OS)时,它工作正常:
$ # Ctrl+v (?????)
$ ?????
Run Code Online (Sandbox Code Playgroud)
可能有什么问题?
我有以下错误:
ERROR: check constraint "cc_at_least_one_mapping_needed" is violated by some row
Run Code Online (Sandbox Code Playgroud)
询问:
ALTER TABLE integrations.tax_aggregates
DROP COLUMN IF EXISTS myob_id,
ADD COLUMN myob_id integrations.FOREIGN_IDENTIFIER;
COMMENT ON COLUMN integrations.tax_aggregates.myob_id IS 'Foreign key for MYOB';
ALTER TABLE integrations.tax_aggregates DROP CONSTRAINT IF EXISTS cc_at_least_one_mapping_needed,
ADD CONSTRAINT cc_at_least_one_mapping_needed CHECK ((("qb_id" IS NOT NULL) :: INTEGER +
("xero_id" IS NOT NULL) :: INTEGER +
("freshbooks_id" IS NOT NULL) :: INTEGER +
("myob_id" IS NOT NULL) :: INTEGER +
("ppy_id" IS NOT NULL) :: INTEGER) > 0); …Run Code Online (Sandbox Code Playgroud) 包含每位员工日常活动的文件。它显示了员工在工作时间所做的详细描述。所以这些文件是由员工准备的。
现在,我的需求是如何为这个模型设计一个数据库。我只知道数据库的基础知识,但我没有设计任何数据库。因此,任何人都可以帮助我解决如何为应用程序创建数据库设计。
该设计还应该适用于查询以获取有关单个员工的详细信息,例如
例如:
shiva 'shiva' 在 CCTNS 项目上花费的总时间
查找指定项目的团队负责人
查找特定项目中的成员
如果我不在外部指定排序规则,PostgreSQL 的默认行为是什么?主要问题之一,是否区分大小写?
我在 64 位 Windows 7 上运行 PostgreSQL 9.3.5。
我的数据每季度到达,在多个表 ( table1, ..., tableN) 中,这些表在周期内通过基于关键标识符的跨表约束进行链接。在其他列中,每个表都具有随时间持续存在的标识符:pfi-持久特征标识符和ufi-通用特征标识符。
pfi每个表都是唯一的(非常罕见的是table1.pfi = table2.pfi.
ufi在所有表和所有时间都是唯一的。它不是行数据的散列,但您可以这样认为。
每个时期,在每个表中,一些新的pfi产生,一些旧pfi的退役。一些pfi改变属性。ufi跟踪给定(行)的任何属性的任何更改pfi,因此为它获取更改的(和新的)行table1只是一个问题:
-- 1st query
select a.*
into vm201512.property_d
from vm201512.property a
where not exists (select 1 from vm201412.property where ufi = a.ufi);
Run Code Online (Sandbox Code Playgroud)
这将选择pfi在至少一列中是新的 (new ) 或更改的所有行。
每个表的大约 96% 在各个方面都保持不变。因此,在分析跨周期变化时,我构建了一个仅包含更改数据和新数据的表。这将表大小从 ~3.5m 行减少到 …
在存储事件的表中,日期和时间是两个单独的列:
CREATE TABLE events (
pk int serial,
detail text,
ev_date date,
ev time without time zone
);
Run Code Online (Sandbox Code Playgroud)
如果我过滤日期:
ev_date BETWEEN start_date::date AND end_date::date AND
ev_time BETWEEN start_date::time AND end_date::time
Run Code Online (Sandbox Code Playgroud)
我错过了每天时间范围之外发生的两个日期内的所有事件。
因此,开始时间仅与开始日期相关,与结束日期相同。
有人对如何有效地处理数百万个事件提出建议吗?
我有一张users类似于
CREATE TABLE users (
id bigserial NOT NULL,
msisdn text NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
以及在 上UNIQUE定义的约束msisdn:
ALTER TABLE users ADD CONSTRAINT UNIQUE (msisdn);
Run Code Online (Sandbox Code Playgroud)
现在,我试着跑
EXPLAIN SELECT * FROM users WHERE msisdn = '000000000001';
Run Code Online (Sandbox Code Playgroud)
和 PostgreSQL 正在回归
Seq Scan on users (cost=0.00..7.80 rows=1 width=400)
Filter: (msisdn = '000000000001'::text)
Run Code Online (Sandbox Code Playgroud)
该表目前有 256 行。会不会是表太小以至于PostgreSQL认为做全表扫描而不是扫描索引更好?如何确保 PostgreSQL 实际使用索引而不是进行全表扫描?
postgresql ×10
array ×2
collation ×1
constraint ×1
datetime ×1
dynamic-sql ×1
index ×1
json ×1
psql ×1