我正在尝试学习 PostgreSQL 管理并开始学习如何使用psql命令行工具。
当我使用 登录时psql --username=postgres,如何列出所有数据库和表?
我曾尝试\d,d并dS+但没有列出。我已经用 pgAdmin III 创建了两个数据库和几个表,所以我知道它们应该被列出。
当我希望一列具有不同的值时,我可以使用约束
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
是否应该授予开发人员查询(SELECT/只读)生产数据库的权限?我之前工作的地方,开发团队有这个db_datareader角色;我现在工作的地方开发团队甚至无法连接到生产实例。
其中一个测试实例是每周一次从生产备份中恢复的生产副本,因此开发人员实际查看数据没有任何问题。
不允许开发人员查询生产(除了根本不希望他们有权读取敏感数据)有什么好的理由?
总是创建交易是一种不好的做法吗?
例如,为一个简单的SELECT?
在没有必要的情况下创建交易的成本是多少?
即使您使用的是像 那样的隔离级别READ UNCOMMITTED,这是否是一种不好的做法?
当我尝试删除数据库时,出现错误“无法删除数据库“dbname”,因为它当前正在使用中”。但是,当我运行时sp_who2,肯定没有连接到该数据库的会话。我还将数据库设置为single_user mode with rollback immediate.
为什么会这样?
我正在为一个简单的银行数据库编写架构。以下是基本规格:
银行应用程序将专门通过存储过程与其数据库通信。
我希望这个数据库每天接受数十万个新事务,以及更高数量级的平衡查询。为了非常快速地提供余额,我需要预先汇总它们。同时,我需要保证余额永远不会与其交易历史相矛盾。
我的选择是:
有一个单独的balances表并执行以下操作之一:
将事务应用于transactions和balances表。TRANSACTION在我的存储过程层使用逻辑来确保余额和交易始终同步。(由杰克支持。)
将交易应用到transactions表并有一个触发器,balances用交易金额为我更新表。
将交易应用到balances表中,并有一个触发器transactions为我在表中添加一个新条目,其中包含交易金额。
我必须依靠基于安全的方法来确保在存储过程之外不能进行任何更改。否则,例如,某些进程可以直接将事务插入transactions表中,并且在该方案1.3下相关余额将不同步。
有一个balances索引视图,可以适当地聚合事务。存储引擎保证余额与其交易保持同步,因此我不需要依赖基于安全的方法来保证这一点。另一方面,我不能再强制余额为非负数,因为视图——甚至索引视图——不能有CHECK约束。(由丹尼支持。)
只有一个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
我应该什么时候重建我的关系数据库 (SQL Server) 中的索引?
是否有定期重建索引的情况?
我错误地从远程 SQL Server 2008 表中删除了大约 2,000,000 条记录。服务器未授予我访问服务器端备份文件的权限。
有什么办法可以找回这些记录吗?
Visual Studio 2010 引入了数据库项目和一整套相关功能,据说可以促进数据库开发。多年来,我一直使用 SQL Server Management Studio (SSMS) 进行数据库开发,没有出现任何问题。
我想在数据库中存在的列的名称中搜索字符串。
我正在处理一个维护项目,我处理的一些数据库有 150 多个表,所以我正在寻找一种快速的方法来做到这一点。
你有什么建议吗?
sql-server ×8
tools ×2
aggregate ×1
command-line ×1
constraint ×1
index ×1
metadata ×1
permissions ×1
postgresql ×1
psql ×1
recovery ×1
ssms ×1
transaction ×1