小编Eva*_*oll的帖子

为什么在构造具有一个元素而不是两个元素的行时需要 ROW 关键字?

在 PostgreSQL 11 中,以下表达式

UPDATE test_table SET ("column_a","column_b") = ('value-a','value-b') WHERE "column_a" = 'value-c' 
Run Code Online (Sandbox Code Playgroud)

被接受并执行更新。

但是对于单个列/值,例如

UPDATE test_table SET ("column_a") = ('value-a') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误。ROW必须提供,例如

UPDATE test_table SET ("column_a") = ROW ('value-a') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)

有没有解释为什么选择这种行为?如果ROW缺少,是否有歧义?

postgresql syntax row

2
推荐指数
1
解决办法
136
查看次数

psql:致命:用户“GuardDog_02”的密码验证失败

在 postgresql 9.5.1 中,我创建了一个名为 GuardDog_02 的用户。我给了它密码。我给了它创建数据库和用户的权限:

CREATE USER GuardDog_02 WITH PASSWORD 'apple100' CREATEDB CREATEUSER;
Run Code Online (Sandbox Code Playgroud)

然后在 GuardDog_02 系统用户(Mac OSX)下:

$ psql -d template1
Password: 
psql: FATAL:  password authentication failed for user "GuardDog_02"
Run Code Online (Sandbox Code Playgroud)

我更新密码只是为了确保我输入正确:

template1=# ALTER USER GuardDog_02 WITH PASSWORD 'apple100';
Run Code Online (Sandbox Code Playgroud)

仍然说密码验证失败。我也检查了 pg_hba.conf 文件:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# …
Run Code Online (Sandbox Code Playgroud)

postgresql authentication

1
推荐指数
1
解决办法
1万
查看次数

为什么我的数据库的数据类型发生了变化?

我在 EC2 实例中安装了 PostgreSQL。我想迁移到RDS,因此使用了DMS服务。但是,后来我意识到列的数据类型已更改。数据类型的变化可以在附加的图像中看到。EC2 中的表

RDS中的表

postgresql aws amazon-dms

1
推荐指数
1
解决办法
293
查看次数

基于排名位置的数据离散化

假设我有一个包含架构的表:

id   value
1    0.3
2    0.6
5    0.1
4    0.7
Run Code Online (Sandbox Code Playgroud)

由...提供

CREATE TABLE foo AS
SELECT * FROM (
  VALUES (1,0.3::float),(2,0.6),(5,0.1),(4,0.7)
) AS x(id, value)
Run Code Online (Sandbox Code Playgroud)

我想离散值列。

这个想法是对值进行排序,并将 1 与前半部分相关联,将 2 与第二部分相关联。

id   value  normalized
1    0.3    1
2    0.6    2
5    0.1    1
4    0.7    2
Run Code Online (Sandbox Code Playgroud)

我不知道如何在 SQL 中做到这一点,有什么帮助吗?

PS:我正在使用 Postgres,所以任何依赖 Postgres 的解决方案也可以

postgresql normalization window-functions

1
推荐指数
1
解决办法
201
查看次数

在哪里可以找到有关 SQL Server 内部结构的文档?

我知道,有人告诉我,微软在 MSDN 下有一个 per-dev doc 系统。具体来说,我正在寻找有关 WAL 日志内部格式的文档。这在任何地方都有记录吗?第三方肯定可以访问这个吗?

而且,无论如何,是否可以在不先付费的情况下知道 MSDN 记录的内容?

SQL Server 内部还有哪些其他文档来源?

sql-server database-internals

1
推荐指数
1
解决办法
276
查看次数

如何在旧数据库中采用 PostgreSQL 命名约定?

我意识到我需要更新查询,但如果我有一个包含camelCase空格的数据库,则必须在标识符上使用双引号(即架构、表、列)。我如何摆脱考虑到我的标识符中不能有大写字母或空格。我需要将它们全部标准化为Snake_case

postgresql identifier

1
推荐指数
1
解决办法
3557
查看次数

SQL Server 的 is_nullable 有什么意义吗?

SQL Server 有一个类型标志,称为is_nullable您可以在 上看到它sys.types。目前,(SQL Server 2019)它只设置为FALSE两种类型,sys.timestampsys.sysname. 对sys.timestamp这种类型似乎接受null。在sys.sysname它没有。这种行为有什么解释吗?

你可以看到这些类型

SELECT * FROM sys.types WHERE is_nullable = 0;  
SELECT TYPEPROPERTY('timestamp', 'AllowsNull');  -- returns 0
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它,

CREATE TABLE foo ( a sys.timestamp );
INSERT INTO foo (a) VALUES ( null );
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用,这将不起作用 sys.sysname

Msg 515 Level 16 State 2 Line 1
Cannot insert the value NULL into column 'a', table 'dbo.foo'; column does not allow nulls. INSERT …
Run Code Online (Sandbox Code Playgroud)

null sql-server datatypes metadata sql-server-2019

1
推荐指数
2
解决办法
78
查看次数

为什么不能在窗口函数中聚合后进行基本操作?像 (max(x)+5), vs (5+max(x))

聚合和窗口函数的语法令人困惑,这不起作用,

SELECT (max(x)+5) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)

虽然这有效

SELECT 5+max(x) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)

如果运算符是可交换的,那很好,但我试图将间隔除以秒(在我的特定情况下,尽管我解决了它)。有没有办法简化这个。

SELECT (max(x)/5) OVER ()
FROM generate_series(1,10) AS t(x);
Run Code Online (Sandbox Code Playgroud)

所以不需要另一个封装查询?这是一个 PostgreSQL 的东西,还是一个 SQL 的东西?有没有办法消除查询的歧义?

postgresql syntax aggregate window-functions

0
推荐指数
1
解决办法
218
查看次数

无法在默认端口上建立 DAC 连接。确保 DAC 已启用

当我登录到 Sql-Server 操作系统的远程桌面时,无法使用 SSMS 建立本地DAC 连接。第一个原因是 SQL 浏览器服务关闭。后来,我被指出的第二个原因是“DAC 未激活”错误:

“无法在默认端口上建立 DAC 连接。请确保 DAC 已启用”。

我寻找解决方案。我发现的建议解决方案是启用“RemoteDacEnabled”Facet 属性或运行

sp_configure 'remote admin connections', 1 
Run Code Online (Sandbox Code Playgroud)

这让我想知道,为什么我应该启用REMOTE DacEnabled 属性,以防我想从本地系统连接?我这里的 REMOTE 是不是错了?

MSDN 解释说

"The connection is only allowed from a client running on the server. No network connections are permitted."

If I HAVE TO logon from local server and NOT over the network, what sense does a REMOTE DAC setting ever make?

EDIT/part of the answer: The main reason …

sql-server ssms connections sql-server-2016 dac

0
推荐指数
1
解决办法
1721
查看次数

查询多个日期范围

我有 Postgres 9.5 版。我需要通过一个查询来获取日期范围的结果:

2017-02-16 -  2017-02-26
2017-01-16 -  2017-01-26
2016-12-16 -  2016-12-26
2016-11-16 -  2016-11-26
Run Code Online (Sandbox Code Playgroud)

我怎么能用一个查询做到这一点?我试过:

SELECT  sum(sell) as sell
FROM "stat" 
LEFT JOIN "stat_key" ON stat.stat_key = stat_key.id 
WHERE ("stat"."date" >= '2017-02-16' AND stat."date" <= '2017-02-26')
AND ("stat"."date" >= '2017-01-16' AND stat."date" <= '2017-01-26')
AND   ("stat"."date" >= '2016-12-16' AND stat."date" <= '2017-12-26')
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

统计表数据

CREATE TABLE stat
AS
  SELECT date::date, sell
  FROM ( VALUES
    ( '2016-11-14', 0 ),
    ( '2017-01-27', 0 ),
    ( '2017-01-27', 0 ),
    ( '2016-11-10', …
Run Code Online (Sandbox Code Playgroud)

postgresql

0
推荐指数
1
解决办法
236
查看次数