我有一张表,用于存储两个人之间的对话。
数据将如下所示:
CREATE TABLE foo
AS
SELECT $$[
{ "user": 1, "timestamp": 1, "message": "First message" },
{ "user": 2, "timestamp": 2, "message": "Second message" },
{ "user": 2, "timestamp": 3, "message": "Debounced message from same user" },
{ "user": 1, "timestamp": 4, "message": "Last message" }
]$$::jsonb AS jsondata;
Run Code Online (Sandbox Code Playgroud)
我从不需要单独查找每条消息,所以我只想将整个对话存储在一个jsonb字段中。我需要对所有消息执行全文搜索。
我的第一个想法是创建一个新的文本列,将所有消息连接到一个长字符串中,然后在该列上创建一个三元组 GIN 索引。
这似乎是一种浪费大量空间的 hack,所以我想避免中间列。如何直接从jsonb列创建索引?
我似乎无法使用我的数据库在 Windows 上转储/恢复。使用的行和错误消息:
pg_dump -h localhost -U postgres --format=c -O -d ue > latest.dump
pg_restore -h localhost -U postgres -d ue latest.dump
Run Code Online (Sandbox Code Playgroud)
得到这个错误,
pg_restore: [archiver] 输入文件似乎不是有效的存档
有了这个,
pg_dump -h localhost -U postgres -O -d ue > latest.dump
psql -h localhost -U postgres -d ue -f latest.dump
Run Code Online (Sandbox Code Playgroud)
我收到这个错误,
psql:latest.dump:1: 错误:编码“UTF8”的字节序列无效:0xff
我完全被难住了。大多数搜索结果与不使用正确的pg_restore/psql与导出的文件类型有关pg_dump,但正如您在上面看到的,我已经考虑了这一点。
latest.dump 似乎正确填写,至少以纯格式导出我可以阅读的 SQL 并且是数据库的正确导出。
运行 SQL Server 2017,使用交互式REPL 客户端sqlcmd如何获得查询执行的时间?
你可以在这里sp_BlitzErik在他的回答中展示这一点,
SQL Server Execution Times:
CPU time = 1859 ms, elapsed time = 321 ms.
Run Code Online (Sandbox Code Playgroud) 根据postgresql uuid-ossp文档uuid_generate_v1()是基于Mac地址+时间戳:
https://www.postgresql.org/docs/9.4/static/uuid-ossp.html
在分布式数据库场景中,我们有数百个数据库使用 UUID 键生成记录并同步回中央数据库。
假设我们检测到一台机器将来的日期/时间错误,我们将其改回正确的日期/时间。它可能会在此特定计算机上生成冲突的 UUID 密钥吗?
一种情况是夏令时/夏令时。
在 MySQL 中使用下表:
CREATE TABLE bob(foo ENUM('a','b','c'));
INSERT INTO bob (foo) VALUES ('a'),('b'),('c'),('a'),('a');
SELECT * FROM bob WHERE foo >= 2;
+------+
| foo |
+------+
| b |
| c |
+------+
Run Code Online (Sandbox Code Playgroud)
使用 PostGres 中的下表:
CREATE TYPE stuff AS ENUM ('a', 'b', 'c');
INSERT INTO bob (foo) VALUES ('a'), ('b'), ('b'), ('c'), ('c');
SELECT * FROM bob WHERE foo > 2;
(HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.) …Run Code Online (Sandbox Code Playgroud) 我只是想知道 MariaDB 或 MySQL 是否<table value constructor>在 SQL 规范中实现了。在SQL Server和PostgreSQL 中,这是通过标准化的VALUES (expression)?
SELECT *
FROM ( VALUES (1) ) AS t(x);
x
---
1
(1 row)
Run Code Online (Sandbox Code Playgroud)
(来自postgresql 的语法)。
回顾 PostgreSQL 的一些回归测试,我可以看到
SELECT x, x IS OF (text) AS is_text FROM q;
Run Code Online (Sandbox Code Playgroud)
这显然可以追溯到7.3
添加 IS OF / IS NOT OF 类型谓词 (Thomas)
是否支持这种形式。在我自己的代码中,我会写,
pg_typeof(x) = 'text'
Run Code Online (Sandbox Code Playgroud)
但我IS OF更喜欢。
在 Twitter 交流中,西蒙·韦斯特 (Simon West)向布兰杜尔 (Brandur)询问,
\n\n\n\n\n出于兴趣,为什么使用
\nemail TEXT CHECK (char_length(email) <= 255)而不是email VARCHAR(255)?我以前没有见过这种模式
布兰杜尔回应说,
\n\n\n\n\n很好的问题!
\n\n(1) VARCHAR 和 TEXT 在 Postgres 中的性能相同(请参阅https://www.postgresql.org/docs/current/static/datatype-character.html \xe2\x80\xa6中的“提示”框)。\n 。
\n\n(2) 如果您想更改长度,
\nALTER TABLE则需要独占锁(请参阅https://www.postgresql.org/docs/current/static/sql-altertable.html \xe2\x80\xa6)。改变CHECK是即时的。\n 当回答一个引起质疑的问题时text CHECK (char_length(email) <= 255)vsvarchar(255)
这两个断言中的第一个断言(粗体)是否严格正确?
\n\n如果对第二个主张感兴趣,请查看此问题。
\n假设我们有订单表,并且订单有状态。这三个选项中哪一个最好?
varchar状态栏enum状态栏status_id int和name varchar,并且在订单表中保留status_id作为外键。哪种方法是最好的?int我怀疑使用字典表也更好,因为通过, 而不是 来搜索状态会更快varchar。
在我在 Linux 上默认安装的 SQL Server 2017 中,/var/opt/mssql/data我看到以下数据库,
master.mdf- master 数据库- 记录 SQL Server 实例的所有系统级信息。model.mdf-模型数据库- 用作在 SQL Server 实例上创建的所有数据库的模板。对模型数据库所做的修改,例如数据库大小、排序规则、恢复模型和其他数据库选项,将应用于之后创建的任何数据库。msdbdata.mdf- msdb 数据库- SQL Server 代理使用它来安排警报和作业。tempdb.mdf- tempdb 数据库- 是用于保存临时对象或中间结果集的工作区。所有这些数据库实际上都有很好的文档记录。然而,我的安装对资源数据库的遗漏很突出。Resource Database 的描述似乎表明它是自己的数据库,
资源数据库是一个只读数据库,其中包含 SQL Server 附带的所有系统对象。SQL Server 系统对象(例如 sys.objects)在物理上持久保存在 Resource 数据库中,但它们在逻辑上出现在每个数据库的 sys 架构中。资源数据库不包含用户数据或用户元数据。
更令人困惑的是,对于SQL Server 2012,文档说,(不是 2017,这是我正在运行的)
资源的物理性质
Resource 数据库的物理文件名是 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf。这些文件位于
<drive>:\Program Files\Microsoft SQL Server\MSSQL11.<instance_name>\MSSQL\Binn\. 每个 SQL Server …
postgresql ×6
enum ×2
linux ×2
mysql ×2
benchmark ×1
client ×1
index ×1
json ×1
mariadb ×1
mariadb-10.3 ×1
pg-dump ×1
pg-restore ×1
random ×1
sql-server ×1
sql-standard ×1
time ×1
uuid ×1
varchar ×1
where ×1
windows ×1