在什么情况下 Oracle 高级排队是实现功能需求的首选机制?例如,从银行账户 A 到银行账户 B 的汇款在理论上可能被认为是两种不同的操作,并且可以分别实现——首先,将来自账户 A 的汇款入队(更新),然后将资金转移到账户 B(更新) . 但是,很明显它不能那样做,因为这两个操作应该在一个一致的操作中完成 - 在事务中。
也许只有在开发执行一些内部(通过执行 DML 操作和调用其他本地存储的 proc/fnc)和外部(通过调用一些 web 服务)的逻辑的存储过程/函数时才应该考虑高级排队。当使用这种对 webservices 的调用时,我们不能把它全部包装成一致的事务,所以唯一的方法是使用一些排队机制......
任何现实生活中的详细示例将不胜感激。
我好奇的不是技术本身的细节,而是使用这种消息传递的真实案例是什么,因为我以前没有这样做过。比如,为什么我需要传递一些数据(消息有效负载)?
我在 SQL Server 2012 上有一个包含 15 个数据库的实例。我将设置备份系统,该系统每晚都可以工作。我只想备份模式,因为有几个数据库非常大。我还没有找到解决这个问题的任何方法。
如何仅备份带有作业的架构?
我有一个包含 varchar 类型字段中的 XML 数据的表。该字段用于存储来自各种不同 XML 模式的数据,其中一些通过存储在另一个表中的记录相关联。
我最近创建了一些解析 XML 的视图,并且在某些情况下创建了一些值的枢轴。这些视图为我的报告提供了极好的数据,但对性能造成了严重影响。我想知道是否可以通过索引提高性能。
下面是一个视图的例子:
create view StudentHours as
select
x.TableRecordId as Id
, x.RecordXml.value('(/TableRecord/LOGDate)[1]', 'DateTime') as LogDate
, x.RecordXml.value('(/TableRecord/LOGHours)[1]', 'float') as Hours
, x.RecordXml.value('(/TableRecord/LOGApproved)[1]', 'varchar(10)') as Approved
, y.PKTableRecordId as CourseId
from
(select TableRecordId, Cast([Schema] as Xml) as RecordXml
from TableRecords where TableSchemaId = 1857) as x
join TableRecordRelations as y on x.TableRecordId = y.FKTableRecordId
Run Code Online (Sandbox Code Playgroud)
然后,我将在其他执行聚合等操作的视图中使用此视图。
名为 TableRecords 的表在其唯一 id TableRecordId 上有一个索引,TableRecordRelations 在其重要字段上也有索引。
添加一两个索引是否有助于此视图的性能?是否需要更多数据来确定这一点?
我有两个关于 Oracle 表的内联约束声明的问题:
这是一种不好的做法吗?如果是这样,为什么?
如何像使用大纲声明时那样为主键和索引声明不同的表空间?就像是
创建表 THIS_TABLE (
身份证号码,
约束 THIS_TABLE_PK (id) 表空间 INDEX_TABLESPACE
) 表空间 DATA_TABLESPACE;
我有一个返回setof record类型的函数。
CREATE TYPE CIR_TYPE AS
(
ID integer,
path text,
cycle boolean
);
CREATE OR REPLACE FUNCTION circular_ref() RETURNS setof CIR_TYPE AS $body$
DECLARE
r CIR_TYPE;
BEGIN
For r in WITH RECURSIVE graph(ID, path, cycle) AS (
SELECT id AS id
, ARRAY[parentid, id] AS path
, (parentid = id) AS cycle
FROM mytable
UNION ALL
SELECT d.id, d.parentid ||path, d.parentid = ANY(path)
FROM graph g
JOIN mytable d ON d.id = g.path[1]
WHERE NOT g.cycle
) …Run Code Online (Sandbox Code Playgroud) 请检查下面的表结构和要插入该表的记录。
CREATE TABLE [tabGeneraltable](
id int identity,
[codGenLedger] [uniqueidentifier] NOT NULL,
[codInvoice] [numeric](18, 0) NULL,
[accountValue] [numeric](18, 2) NULL,
[articleValue] [nvarchar](50) NULL,
[codFinAccount] [int] NULL,
[documentNbr] [nvarchar](50) NULL,
[valueDate] [datetime] NULL,
[insertDate] [datetime] NULL,
CONSTRAINT [PK_tabGeneralLedger] PRIMARY KEY CLUSTERED([codGenLedger] ASC)
)
insert into [tabGeneraltable]([codGenLedger],[codInvoice], [codFinAccount],
[accountValue],[insertDate])
select NEWID(),1,11,232,getdate()
union all
select NEWID(),10,45,214,getdate()
union all
select NEWID(),9,425,410,getdate()
union all
select NEWID(),14,475,356,getdate()
Run Code Online (Sandbox Code Playgroud)
插入所有记录后,当在这个表上执行一个简单的选择语句时
select * from tabGeneraltable
Run Code Online (Sandbox Code Playgroud)
标识列 ID 的顺序不正确或记录是随机插入的。(insertDate如果单独插入所有记录,请检查列值。)
为什么会发生这种情况?
从我当前的查询中,我获得了这个 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) 我目前正在恢复一个数据库,我尝试了三次恢复数据库。第三次我成功了,但不幸的是,其他两次恢复数据库的尝试似乎仍在运行,但从未完成。
我在 pgAdmin 屏幕上有这两个蓝色窗口,我无法删除或停止执行。我尝试了很多东西,我什至卸载了两次PostgreSQL,但恢复窗口又出现了。
我使用的是 Windows 8 和 PostgreSQL 9.6。
我在 Influx 中有一些网络计数器,我用 Grafana 绘制它们。
我正在尝试组合来自几个以太网接口的统计数据并将它们组合起来以显示总带宽。
这两个单独的查询独立工作,但我不知道如何编写它以将这两者结合起来。
SELECT 8 * non_negative_derivative(mean("value"), 1s )
FROM "inoctets"
WHERE "host" = 'myhost1' AND $timeFilter
GROUP BY time(1s) fill(null)
SELECT 8 * non_negative_derivative(mean("value"), 1s )
FROM "inoctets"
WHERE "host" = 'myhost4' AND $timeFilter
GROUP BY time(1s) fill(null)
Run Code Online (Sandbox Code Playgroud)
编辑:FWIW 我正在运行 Influx 1.1.1 和 Grafana 4.1.1
oracle ×3
postgresql ×3
sql-server ×3
aggregate ×1
array ×1
backup ×1
constraint ×1
insert ×1
jobs ×1
json ×1
pgadmin ×1
pgadmin-4 ×1
restore ×1
schema ×1
select ×1
tablespaces ×1
view ×1