我有一张桌子:
CREATE TABLE names (id serial, name varchar(20))
Run Code Online (Sandbox Code Playgroud)
我想要那个表中的“最后插入的 id”,而不是RETURNING id在插入时使用。好像有一个函数CURRVAL(),但我不明白如何使用它。
我试过:
SELECT CURRVAL() AS id FROM names_id_seq
SELECT CURRVAL('names_id_seq')
SELECT CURRVAL('names_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。如何使用currval()获取最后插入的 ID?
如果不存在,有没有办法在 MySQL 中创建索引?
MySQL 不支持明显的格式:
CREATE INDEX IF NOT EXISTS index_name ON table(column)
ERROR 1064 (42000): You have an error in your SQL syntax;...
Run Code Online (Sandbox Code Playgroud)
MySQL 版本( mysql -V) 是5.1.48,但我认为MySQL 缺乏CREATE INDEX IF NOT EXIST所有版本的能力。
仅当 MySQL 中不存在索引时,创建索引的正确方法是什么?
自 SQL Server 6.5 以来,我一直在使用 SQL Server,但仍然萦绕在我脑海中的旧建议是永远不要进行就地升级。
我目前正在将我的 2008 R2 DEV 和 TEST 系统升级到 SQL Server 2012,并且需要使用相同的硬件。不必恢复我的报告服务配置的想法非常有吸引力,我真的很聪明。不涉及分析服务或任何不寻常或非标准的东西——只安装了数据库引擎和报告服务。
有没有人遇到过就地升级的严重问题?或者我应该重新评估我对就地升级的立场?
NOTE程序员.se和dba.se的受众不同,会有不同的观点,所以在这个例子中我认为复制什么是反对或支持将应用程序逻辑放在数据库层的论据是什么?在程序员.se上。
我已经找不到关于 dba 的讨论了,原帖已经说明了一切,所以:
大多数软件开发人员都希望将应用程序逻辑保留在应用程序层中,我们将它保留在这里可能感觉很自然。数据库开发人员似乎希望将应用程序逻辑放在数据库层,作为触发器和存储过程。
就我个人而言,我更愿意在应用层中保留尽可能多的内容,以便更容易调试并保持各层的职责分离。
您对此有何看法,在数据库层中应该或不应该实现什么?
注意,我不是该问题的 OP,但保留了原始措辞。
我在这里读到每行将存储一些额外的数据,因此我们可能会看到性能下降,但还有哪些其他风险?
例如。这会影响数据库的恢复吗?我们还需要做些什么来利用这一点吗?
我计划执行这些命令:
ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON
Run Code Online (Sandbox Code Playgroud)
我相信这会让我们更接近 oracle,如果一个事务正在更新其他事务仍然可以读取旧数据。这样对吗?
我正在研究这个,因为我厌倦了 SQL Server 2005 中的锁定问题。我希望这可以减少我们的用户看到的偶尔的死锁,帮助我们的应用程序的整体性能并鼓励我们的开发人员在没有害怕。
我们正在研究开发一种工具来捕获和分析我们收集的大量网络流量数据。每天我们捕获大约 14 亿条流记录,它们的 json 格式如下所示:
{
"tcp_flags": "0",
"src_as": "54321",
"nexthop": "1.2.3.4",
"unix_secs": "1352234521",
"src_mask": "23",
"tos": "0",
"prot": "6",
"input": "105",
"doctets": "186",
"engine_type": "0",
"exaddr": "2.3.4.5",
"engine_id": "2",
"srcaddr": "9.8.7.6",
"dst_as": "12345",
"unix_nsecs": "752265174",
"sysuptime": "2943529544",
"dst_mask": "24",
"dstport": "80",
"last": "2943523241",
"srcport": "52672",
"dpkts": "4",
"output": "111",
"dstaddr": "6.5.4.3",
"first": "2943517993"
}
Run Code Online (Sandbox Code Playgroud)
我们希望能够对数据集进行快速搜索(少于 10 秒),最有可能在很短的时间内(10 - 30 分钟间隔)。我们还希望索引大部分数据点,以便我们可以快速搜索每个数据点。我们还希望在执行搜索时拥有最新的数据视图。留在开源世界会很棒,但我们不反对为这个项目寻找专有解决方案。
这个想法是保留大约一个月的数据,这将是大约 432 亿条记录。粗略估计,每条记录将包含大约 480 字节的数据,相当于一个月内约 18.7 TB 的数据,可能是索引的三倍。最终,我们希望增加该系统存储数万亿条记录的能力。
我们已经(非常基本地)评估了 couchbase、cassandra 和 mongodb 作为这个项目的可能候选者,但是每个人都提出了自己的挑战。使用 couchbase,索引是每隔一段时间完成的,而不是在插入数据期间完成,因此视图不是最新的,cassandra 的二级索引在返回结果方面效率不高,因为它们通常需要扫描整个集群以获取结果,而 mongodb 看起来很有希望但是由于它是主/从/分片,因此扩展似乎要困难得多。我们计划评估的其他一些候选者是 elasticsearch、mysql(不确定这是否适用)和一些面向列的关系数据库。任何建议或现实世界的经验将不胜感激。
我想删除当前打开到特定 PostgreSQL 数据库的所有连接(会话),但不重新启动服务器或断开与其他数据库的连接。
我怎样才能做到这一点?
使用 PostgreSQL v9.1。我有以下表格:
CREATE TABLE foo
(
id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,
type VARCHAR(60) NOT NULL UNIQUE
);
CREATE TABLE bar
(
id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY,
description VARCHAR(40) NOT NULL UNIQUE,
foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT
);
Run Code Online (Sandbox Code Playgroud)
假设第一个表foo是这样填充的:
INSERT INTO foo (type) VALUES
( 'red' ),
( 'green' ),
( 'blue' );
Run Code Online (Sandbox Code Playgroud)
有没有办法bar通过引用foo表轻松插入行?或者我必须分两步完成,首先查找foo我想要的类型,然后在其中插入一个新行bar?
这是一个伪代码示例,显示了我希望可以完成的工作:
INSERT INTO bar (description, foo_id) VALUES
( …Run Code Online (Sandbox Code Playgroud) 我使用One click installer在装有 Mac OS X 的计算机上安装了 PostgreSQL 。然后我尝试使用该psql命令访问 PostgreSQL ,但它似乎不可用。
我收到这条消息:
psql
-bash: psql: command not found
Run Code Online (Sandbox Code Playgroud)
我需要安装更多东西吗?或者我如何配置 PostgreSQL 以便我可以在我的计算机上使用它?
postgresql ×4
sql-server ×3
mysql ×2
cassandra ×1
connections ×1
foreign-key ×1
index ×1
insert ×1
installation ×1
mac-os-x ×1
migration ×1
mongodb ×1
nosql ×1
psql ×1
rdbms ×1
replication ×1
sequence ×1
session ×1
ssrs ×1
transaction ×1
upgrade ×1