我正在使用 Postgres 9.5。我为我的三个表创建了一个 INSERT 转储文件。为了避免出现外键错误,我将以下内容添加到文件的顶部和底部(“...”是所有插入的位置)...
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;
SET search_path = public, pg_catalog;
ALTER TABLE addresses DISABLE TRIGGER ALL;
ALTER TABLE table1 DISABLE TRIGGER ALL;
ALTER TABLE table2 DISABLE TRIGGER ALL;
…
ALTER TABLE addresses ENABLE TRIGGER ALL;
ALTER TABLE table1 ENABLE TRIGGER ALL;
ALTER TABLE table2 ENABLE TRIGGER ALL;
Run Code Online (Sandbox Code Playgroud)
但是,即使我运行这个文件,我也会收到类似的错误
ERROR: insert or update …Run Code Online (Sandbox Code Playgroud) 我有一张如下表:
SELECT [EffectiveDate]
,[Rate]
[ModUser]
FROM [Vision]
Run Code Online (Sandbox Code Playgroud)
有很多行带有 ModUsers 名称。我需要提供 ModUsers 名称并获取最新费率。
我怎么做?
我有一个需要字符串作为参数的函数。它总是一个插入。我如何使它工作?值的双引号在语法上不好
select inversor_insert('INSERT INTO clien(column1,column2) values('value1','value2')')
from dual;
Run Code Online (Sandbox Code Playgroud) 我正在尝试进行查询,其中我将拥有 id 和该人是他们的上司的员工人数,还有不是经理的人,应该出现并且计数为零。
这就是我所做的,但那些不是经理的人显示为空:
create view scnt as (
select E1.super, count(distinct E1.id) cnt
from Employee E1 left outer join Employee E2
on E1.super = E2.id
group by E1.super
);
create view numSuper as (
select E.id, S.cnt
from Employee E left outer join scnt S
on S.super = E.id or E.id = null
);
select * from numSuper
Run Code Online (Sandbox Code Playgroud)
这是架构:

但是我们可以忽略所有噪音并使用我们需要的东西: employee(id, super)
这是插入的小提琴:http : //dbfiddle.uk/? rdbms=postgres_9.6&fiddle= 4c08869d0e8eba6c82fd4957092379a1
关于如何做到这一点的任何想法?
是否有关于在具有 1000 多个数据库和 10TB 存储空间的服务器上将 SQL Server 2014 升级到 SQL Server 2016 需要多长时间的统计数据?安装后续 2016 服务包需要多长时间?有没有办法通过配置来优化这些安装时间?
目标是最小化维护窗口
更新:让我澄清一个问题。所有生产更新都将在 QA 环境中进行测试,问题不在于这一切。我问的是您已知的优化升级持续时间的选项。我将通过测量我环境中的升级时间来自己搜索这些选项,但如果有“以前的艺术” - 请分享。
我有两个表:
create table animal
(
aid integer,
cid integer,
aname varchar(255) default NULL::character varying,
species text
);
create table daily_feeds
(
aid integer,
zid integer,
shift integer,
menu integer
);
Run Code Online (Sandbox Code Playgroud)
和一个查询:
SELECT
aname,
shift
FROM animal
NATURAL JOIN daily_feeds
WHERE menu = 1;
Run Code Online (Sandbox Code Playgroud)
餐桌动物包含大约 40000 行,表 daily_feeds 包含大约 80000 行,每只动物 2 行。
我认为在用于连接animal.aid和daily_feeds.aid的列上添加索引可能会导致不同的执行计划并提高性能。
create index aaid on animal (aid);
create index daid on daily_feeds using btree (aid);
Run Code Online (Sandbox Code Playgroud)
这不会发生。这是为什么?
显然,这是一个非常简单且学术性的示例,我试图用它来了解有关数据库查询优化的更多信息。
编辑:
添加没有索引时的执行计划:
Hash Join (cost=1439.24..2488.23 rows=499 width=10) …Run Code Online (Sandbox Code Playgroud) 我正在使用 PostgreSQL 10。我想要一个表,允许在列中使用相同的值,但不允许在行中使用。我创建的表:
CREATE TABLE teams
(
team_id SERIAL PRIMARY KEY
team_lead character varying(250) NOT NULL,
member1 character varying(250) NOT NULL,
member2 character varying(250),
member3 character varying(250)
)
Run Code Online (Sandbox Code Playgroud)
这将被允许:
CREATE TABLE teams
(
team_id SERIAL PRIMARY KEY
team_lead character varying(250) NOT NULL,
member1 character varying(250) NOT NULL,
member2 character varying(250),
member3 character varying(250)
)
Run Code Online (Sandbox Code Playgroud)
这不会:
| team_lead | member1 | member2 |
------------------------------------------------
| Jane Doe | Bill Smith | Shirley Green |
| Jane Doe | Carol Lewis | …Run Code Online (Sandbox Code Playgroud) 这是示例:
drop table if exists tst;
create table tst (
num integer not null
);
insert into tst values (1), (2), (3);
-- window functions WITH order by clause
select *, max(num) over (partition by true order by num asc), array_agg(num) over (partition by true order by num asc) as test
from tst;
-- window functions WITHOUT order by clause
select *, max(num) over (partition by true), array_agg(num) over (partition by true) as test
from tst;
Run Code Online (Sandbox Code Playgroud)
结果如下:
为什么order by子句对聚合功能有影响?
FIRST_COL VAL_COL
A 2
B 3
C 4
Run Code Online (Sandbox Code Playgroud)
我需要如下输出。
FIRST_COL VAL_COL
A 2
A 2
B 3
B 3
B 3
C 4
C 4
C 4
C 4
Run Code Online (Sandbox Code Playgroud)
示例:我的原始表包含a=2但我需要在输出中作为a=2b=3 三次 c=4 四次的两倍
Postgres 的文档说明:
虽然访问存储在物化视图中的数据通常比直接或通过视图访问底层表快得多,但数据并不总是最新的;
https://www.postgresql.org/docs/9.6/rules-materializedviews.html
为什么它“通常要快得多”?
postgresql ×6
oracle ×2
sql-server ×2
dump ×1
foreign-key ×1
index ×1
insert ×1
performance ×1
upgrade ×1