小编Nic*_*mas的帖子

如何使用 psql 列出所有数据库和表?

我正在尝试学习 PostgreSQL 管理并开始学习如何使用psql命令行工具。

当我使用 登录时psql --username=postgres,如何列出所有数据库和表?

我曾尝试\dddS+但没有列出。我已经用 pgAdmin III 创建了两个数据库和几个表,所以我知道它们应该被列出。

postgresql tools psql command-line

1362
推荐指数
8
解决办法
276万
查看次数

什么时候应该使用唯一约束而不是唯一索引?

当我希望一列具有不同的值时,我可以使用约束

create table t1(
id int primary key,
code varchar(10) unique NULL
);
go
Run Code Online (Sandbox Code Playgroud)

或者我可以使用唯一索引

create table t2(
id int primary key,
code varchar(10) NULL
);
go

create unique index I_t2 on t2(code);
Run Code Online (Sandbox Code Playgroud)

具有唯一约束的列似乎是唯一索引的良好候选者。

是否有任何已知的原因使用唯一约束而不是使用唯一索引?

index sql-server constraint best-practices unique-constraint

238
推荐指数
4
解决办法
11万
查看次数

开发人员应该能够查询生产数据库吗?

是否应该授予开发人员查询(SELECT/只读)生产数据库的权限?我之前工作的地方,开发团队有这个db_datareader角色;我现在工作的地方开发团队甚至无法连接到生产实例。

其中一个测试实例是每周一次从生产备份中恢复的生产副本,因此开发人员实际查看数据没有任何问题。

不允许开发人员查询生产(除了根本不希望他们有权读取敏感数据)有什么好的理由?

sql-server best-practices permissions

167
推荐指数
17
解决办法
5万
查看次数

总是创建交易是一种不好的做法吗?

总是创建交易是一种不好的做法吗?

例如,为一个简单的SELECT?

在没有必要的情况下创建交易的成本是多少?

即使您使用的是像 那样的隔离级别READ UNCOMMITTED,这是否是一种不好的做法?

sql-server best-practices transaction

111
推荐指数
2
解决办法
8万
查看次数

SQL Server 无法删除数据库 <dbname>,因为它当前正在使用...但没有显示会话

当我尝试删除数据库时,出现错误“无法删除数据库“dbname”,因为它当前正在使用中”。但是,当我运行时sp_who2,肯定没有连接到该数据库的会话。我还将数据库设置为single_user mode with rollback immediate.

为什么会这样?

sql-server-2005 sql-server

88
推荐指数
5
解决办法
22万
查看次数

编写一个简单的银行模式:我应该如何保持我的余额与他们的交易历史同步?

我正在为一个简单的银行数据库编写架构。以下是基本规格:

  • 数据库将存储针对用户和货币的交易。
  • 每个用户每种货币都有一个余额,因此每个余额只是针对给定用户和货币的所有交易的总和。
  • 余额不能为负。

银行应用程序将专门通过存储过程与其数据库通信。

我希望这个数据库每天接受数十万个新事务,以及更高数量级的平衡查询。为了非常快速地提供余额,我需要预先汇总它们。同时,我需要保证余额永远不会与其交易历史相矛盾。

我的选择是:

  1. 有一个单独的balances并执行以下操作之一:

    1. 将事务应用于transactionsbalances表。TRANSACTION在我的存储过程层使用逻辑来确保余额和交易始终同步。(由杰克支持。)

    2. 将交易应用到transactions表并有一个触发器,balances用交易金额为我更新表。

    3. 将交易应用到balances表中,并有一个触发器transactions为我在表中添加一个新条目,其中包含交易金额。

    我必须依靠基于安全的方法来确保在存储过程之外不能进行任何更改。否则,例如,某些进程可以直接将事务插入transactions表中,并且在该方案1.3下相关余额将不同步。

  2. 有一个balances索引视图,可以适当地聚合事务。存储引擎保证余额与其交易保持同步,因此我不需要依赖基于安全的方法来保证这一点。另一方面,我不能再强制余额为非负数,因为视图——甚至索引视图——不能有CHECK约束。(由丹尼支持。)

  3. 只有一个transactions表,但有一个额外的列来存储该交易执行后立即生效的余额。因此,用户和货币的最新交易记录也包含其当前余额。(下面由Andrew建议;由garik提出的变体。)

当我第一次解决这个问题时,我阅读了 两个讨论并决定了 option 2。作为参考,您可以在此处查看它的基本实现。

  • 您是否设计或管理过这样的具有高负载配置文件的数据库?你对这个问题的解决方案是什么?

  • 你认为我做出了正确的设计选择吗?有什么我应该记住的吗?

    例如,我知道对transactions表的架构更改需要我重建balances视图。即使我正在归档事务以保持数据库较小(例如,将它们移到其他地方并用摘要事务替换它们),每次架构更新时都必须重建数千万个事务的视图,这可能意味着每次部署的停机时间会显着增加。

  • 如果索引视图是要走的路,我如何保证没有余额为负?


归档交易:

让我详细说明一下存档交易和我上面提到的“摘要交易”。首先,在像这样的高负载系统中,定期存档将是必要的。我想保持余额与其交易历史之间的一致性,同时允许将旧交易转移到其他地方。为此,我将用每个用户和货币的金额摘要替换每批存档交易。

因此,例如,此交易列表:

user_id    currency_id      amount    is_summary
------------------------------------------------
      3              1       10.60 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 database-design sql-server aggregate materialized-view

70
推荐指数
5
解决办法
7万
查看次数

我应该什么时候重建索引?

我应该什么时候重建我的关系数据库 (SQL Server) 中的索引?

是否有定期重建索引的情况?

sql-server index-maintenance

60
推荐指数
5
解决办法
9万
查看次数

如何找回一些已删除的记录?

我错误地从远程 SQL Server 2008 表中删除了大约 2,000,000 条记录。服务器未授予我访问服务器端备份文件的权限。

有什么办法可以找回这些记录吗?

sql-server-2008 sql-server recovery

51
推荐指数
3
解决办法
8万
查看次数

为什么我应该在数据库开发中使用 Visual Studio 2010 而不是 SSMS?

Visual Studio 2010 引入了数据库项目和一整套相关功能,据说可以促进数据库开发。多年来,我一直使用 SQL Server Management Studio (SSMS) 进行数据库开发,没有出现任何问题。

  • 当 SSMS 对我有用时,我为什么要为 VS2010 烦恼?具体来说,它比 SSMS 做得更好的是什么?
  • 但也许我的前提是不正确的,SSMS 在数据库开发方面仍然胜过 VS。如果是这样,那在哪些具体方面是正确的?

tools ssms visual-studio visual-studio-2010

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

如何列出或搜索数据库中的所有列名?

我想在数据库中存在的列的名称中搜索字符串。

我正在处理一个维护项目,我处理的一些数据库有 150 多个表,所以我正在寻找一种快速的方法来做到这一点。

你有什么建议吗?

sql-server-2008 database-design sql-server metadata

40
推荐指数
3
解决办法
16万
查看次数