小编Eva*_*oll的帖子

text 和 pg_catalog.text 有什么区别?

我有一个经典的 3 环境设置(开发、暂存和生产),每个环境都有自己的RDS PostgreSQL 9.3。客户端/服务器版本是psql (9.3.5, server 9.3.3).

为了保持模式对齐,我有一个周期性的模式差异作业,当模式不同时它会通知我。

几天前,我开始收到许多这些差异:

CREATE TABLE ...
...
<     title pg_catalog.text,
<     subtitle pg_catalog.text,
---
>     title text,
>     subtitle text,
Run Code Online (Sandbox Code Playgroud)

textstaging 中的字段以某种方式转换为pg_catalog.textprod。

text和 和有pg_catalog.text什么区别?如何将这两个模式等同起来?

schema postgresql datatypes

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

什么是“不可移动的行版本”?

我对 postgresql-9.4 数据库进行了完全真空,并且我有很多具有不可移动行版本的表。我想知道这些是什么或者我可以在哪里阅读它们。

INFO:  vacuuming "public.profile_generals"
INFO:  "profile_generals": found 0 removable, 654 nonremovable row versions in 51 pages
DETAIL:  0 dead row versions cannot be removed yet.
Run Code Online (Sandbox Code Playgroud)

postgresql vacuum

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

插入时触发将新记录中的列更新为 CURRENT_TIMESTAMP

好的,所以我试图在最初插入记录时将特定记录中的列更新为 CURRENT_TIMESTAMP。这就是我所拥有的,否则我就迷路了。

CREATE TRIGGER dbo.TrgUpnInsert
  ON [CNLH Security Authentication].dbo.DateTimestamp
    AFTER INSERT, 
    INSERT INTO [CNLH Security Authentication].dbo.EntranceInformation (DateTimestamp) Values (CURRENT_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)

trigger sql-server t-sql timestamp row-modification-time

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

如何在不更改客户端代码的情况下将 varchar 转换为 macaddr

我有一个带有 Debian Jessie 和 Postgresql 9.4 的专用数据库服务器

客户端:A 是一个 Tomcat Java 应用程序,它使用扭矩与连接到数据库服务器的 JDBC 驱动程序。

问题:在使用新值更新行时,更新失败,因为应用程序传输了错误的数据类型。

错误信息:

列“device_macaddr”的类型是 macaddr,但表达式的类型是在字符 159 处变化的字符

Torque 生成的更新语句:

UPDATE device SET device_last_change = $1, device_macaddr = $2 WHERE device_ID = $3
Run Code Online (Sandbox Code Playgroud)

postgresql 中数据类型的定义:

last_change is timestamp (0) without time zone NOT NULL
device_macaddr is macaddr NOT NULL
device_id is bigint NOT NULL
Run Code Online (Sandbox Code Playgroud)

我们最近确实将 DB 和 jdbc 驱动程序从 8.4 更新到 9.4

我能够查明对 jdbc 驱动程序的更改,但无法找到准确显示此行为更改的更改日志。

从那以后,上面的语句似乎不再起作用,而尽管当时可能是错误的数据类型,但它以前仍然起作用。

有没有办法“减轻”来自 Postgres 9.4 DB Server 的针对特定情况的严格检测?

我确实阅读了 jdbc 驱动程序的增强以包含那些额外的数据类型,但是这对我来说还没有用,所以我尝试在我拥有的选项的另一端找到解决方法。

postgresql jdbc cast

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

为什么 psql 会打开两个到 PostgreSQL 的 tcp 连接?

例如,如果我放置一个 iproute,就像这样

sudo iptables -I INPUT -p tcp --syn -m conntrack --ctstate NEW --ctstatus CONFIRMED --dport 5433 -j LOG
Run Code Online (Sandbox Code Playgroud)

我可以看到每次尝试连接到我的数据库时都有两个条目。

[598519.458578] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.0.101 DST=192.168.0.101 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=49795 DF PROTO=TCP SPT=58554 DPT=5433 WINDOW=43690 RES=0x00 SYN URGP=0 
[598520.875428] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.0.101 DST=192.168.0.101 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=65392 DF PROTO=TCP SPT=58560 DPT=5433 WINDOW=43690 RES=0x00 SYN URGP=0 
Run Code Online (Sandbox Code Playgroud)

为什么 psql 需要在两个单独的端口(58554 和 58560)上连接到 PostgreSQL 服务器?也就是说,当我运行一次时,我会收到两条类似上面的消息..

psql -d test -h 192.168.0.101 -p 5433
Run Code Online (Sandbox Code Playgroud)

postgresql psql connectivity

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

在什么情况下,间隙和岛屿需要计数(x 或空)?

这个答案中,Erwin Brandstetter 说:

count(step OR NULL) OVER (ORDER BY date)是最短的语法,也适用于 Postgres 9.3 或更早版本。count()只计算非空值。在现代 Postgres 中,更简洁、等效的语法是:

count(step) FILTER (WHERE step) OVER (ORDER BY date)
Run Code Online (Sandbox Code Playgroud)

我不确定为什么count(step OR NULL)是首选。在我的查询中,我执行以下操作。我重命名了我的变量以匹配他的同时保持语法。

CASE WHEN lag(id_type) OVER (ORDER BY date) <> id_type THEN 1 END AS step
Run Code Online (Sandbox Code Playgroud)

我们正在计算它返回的值。请注意,case 只能返回 1 或 null。

  • 如果两者不相等,则返回 1。
  • 如果它们相等,则返回不计算在内的 null。

欧文的回答是:

这假设涉及的列是NOT NULL. 否则你需要做更多。

所以我更迷茫了。添加count(step OR NULL)什么来保护我们的查询有什么意义?

任何人都可以分解这一点,也许可以展示两个带有数据的示例,其中只有一个 - 一个 -count(x OR NULL)有效?

postgresql null count window-functions gaps-and-islands

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

postgres 行到列

我有一个非常简单的 SQL 查询

SELECT count(date_mdy) AS unique_date_count,
  county,
  date_s
FROM (
  SELECT date_mdy,
    county,
    date_s 
  FROM air_quality2
  GROUP BY county, date_s ,date_mdy 
  ORDER BY county, date_s
) AS t1 
GROUP BY county, date_s 
ORDER BY date_s;
Run Code Online (Sandbox Code Playgroud)

这返回

在此输入图像描述

我希望县名成为列标题。我知道有一个交叉表函数,并且我在这里看到了他们使用它的许多帖子,但我无法让它处理这个查询。

postgresql pivot

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

PostgreSQL 全文搜索 (FTS),::tsvector 和 to_tsvector() 有什么区别?

我有一个带有 tsvector 类型列(col)的表。

我通过脚本填充了一些行并使用 cast data::tsvector,但是(!)有些行填充了to_tsvector(data),所以我有具有不同值的行,如下所示:

  1. '?' '?' '???' '??????' '???????' '???????????' '???????????' '??????????'

  2. '?':7 '??':8 '?????':5 '?????':1 '?????????':3 '?????????':2 '????????':4

这对我来说很惊讶 :) 那么没有用to_tsvector(data)准备的值的开销是多少?pg 会在运行时做 to_tsvector 还是什么?

postgresql full-text-search cast

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

SQL Server 在哪里存储 SA 密码和 SQL Server 密码策略?

在Linux上,SQL Server在哪里存储“SQL Server密码策略”和SA用户的密码?我明白了,“密码”不安全。

错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它太短。密码必须至少为 8 个字符..

进而,

错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它不够复杂。密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、基数 10 的数字和符号。

我猜该策略实际上已编译到数据库中?密码会存储在一个不起眼的位置吗?

sql-server linux database-internals sql-server-2017

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

什么是 SQL Server 中的“混淆密钥”?

撇开笑话不谈,什么是“混淆密钥”?我只是要离开文档

sys.sysclsobjs存在于每个数据库中。每个分类实体包含一行,这些实体共享相同的公共属性,包括以下内容:

...

混淆密钥。

这似乎涉及

  • Content/binn/sqllang.dll
  • Content/binn/sqlmin.dll

我想知道密钥的作用和被混淆的内容,以及是否可供用户使用。

sql-server encryption database-internals

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