在 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 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) 假设我有一个包含架构的表:
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 的解决方案也可以
我知道,有人告诉我,微软在 MSDN 下有一个 per-dev doc 系统。具体来说,我正在寻找有关 WAL 日志内部格式的文档。这在任何地方都有记录吗?第三方肯定可以访问这个吗?
而且,无论如何,是否可以在不先付费的情况下知道 MSDN 记录的内容?
SQL Server 内部还有哪些其他文档来源?
我意识到我需要更新查询,但如果我有一个包含camelCase空格的数据库,则必须在标识符上使用双引号(即架构、表、列)。我如何摆脱考虑到我的标识符中不能有大写字母或空格。我需要将它们全部标准化为Snake_case。
SQL Server 有一个类型标志,称为is_nullable您可以在 上看到它sys.types。目前,(SQL Server 2019)它只设置为FALSE两种类型,sys.timestamp和sys.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
Run Code Online (Sandbox Code Playgroud)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 …
聚合和窗口函数的语法令人困惑,这不起作用,
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 的东西?有没有办法消除查询的歧义?
当我登录到 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 是不是错了?
"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 …
我有 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 ×7
sql-server ×3
syntax ×2
aggregate ×1
amazon-dms ×1
aws ×1
connections ×1
dac ×1
datatypes ×1
identifier ×1
metadata ×1
null ×1
row ×1
ssms ×1