数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

2
是否有“自定义数据类型”之类的东西?
MySQL是否支持自定义数据类型?例如,邮政编码可以存储在一个varchar(10)字段中,但可以压缩为一个int,其中带有空白选项,并带有一个有关5位或5 + 4位邮政编码的标志。 有没有办法为这些事情安装无缝数据类型?就应用程序而言,它将是字符串类型,如果应用程序传递了无效数据,则将只是数据截断(带有或不带有警告)。 可以使用自定义函数(例如,有一个INET_ATON用于IPv4地址的内置函数。但这不允许zip LIKE '12345%'进行正确索引的事情。对自定义数据类型的良好书写支持将允许标记数据类型因此,紧凑型zip int在排序时会像是一样进行排序zip varchar(10)。 这将允许该列为固定宽度,这将允许将6或10字节的变量存储空间缩减为4 byby固定宽度。 有几种适用的用途 邮递区号 IPv6地址 自定义时间戳字段,具有分钟级别的精度和容量2038,且存储使用量少于datetime,但无需支持实施年份之前的日期(例如,如果这些日期是系统中最早的日期,则最小值可以是2007年) 实现DST的时间戳(似乎不存在) 两个字母的美国状态可以存储在一个字节中 ENUM可以将long s分隔为自定义数据类型,这样,DESCRIBE在所有包装中,输出都不会显得那么混乱。 我希望数据类型处理程序的存储方式类似于函数的存储方式。 任何数据库引擎上是否都存在类似的远程功能?我主要使用MySQL,但是我很好奇它是否曾经实现过,没有让应用程序调用类似于INET_ATON函数的函数。 MS SQL确实具有这种性质,但是我想知道它是否仅仅是同义词。(例如,boolean可以是tinyint(1)或或或或postal_code之一的同义词)同义词不是我要问的。charvarchar (5910)

1
Neo4j中每个节点的数据量
我需要在Neo4j中为每个节点存储大量数据。数据是Unicode文本块。实际上,并非每个节点都会有很大的块,但其中很多会。 我仔细阅读了文档,但未发现有关节点大小的任何内容-单个节点可包含的数据量。 有人有什么主意吗?
14 nosql  neo4j 

5
使用多个数据库与使用单个数据库的利弊
我正在一个新项目中工作,该项目要求使用7个数据库,并认为更容易实现性能,稳定性和优化。 虽然我不同意,但我在收集好的参数以使用单个数据库时遇到了麻烦(将表拆分为逻辑域)。 到目前为止,我有一个论点是数据完整性(我不能在数据库之间使用外键)。 使用单个或多个数据库有哪些优点/缺点? [到目前为止的总结] 针对多个数据库的参数: 丢失数据完整性(不能在数据库上使用外键) 失去还原完整性 获得复杂性(数据库用户/角色) 小赔率服务器/数据库将关闭 解决方案: 使用架构来分隔域。 POC:使用伪数据证明7/1 db执行计划中的重点

3
用户数据库是否有标准实现?
我需要为我的网站实现基本的个性化用户功能。这种类型的数据库是否有标准结构?就像将所有用户信息和数据都放在一个表中,每个用户都有自己的行是一种常见的做法,还是应该将此信息拆分到不同的表中并链接在一起(也许是为了提高效率?),我不太关心安全性在这一点上,但我显然希望过早地进行密码加密。 我试图找到我在Google上想要的东西,但无济于事。请让我知道问题是否需要进一步澄清。


9
有哪些数据屏蔽工具?(MySQL,Linux)
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 我正在寻找(理想情况下是免费的,开源的)数据屏蔽工具。有这样的存在吗? 注意:这个相关问题涉及用于生成测试数据的工具,但是在这个问题中,我对从真实数据开始并对其进行遮罩以便在测试中使用更感兴趣,而不会丢失任何使其出于测试目的变得有趣的特殊关系。生成的数据可以用于某些测试目的,但是实际数据会带来您从未想到的问题。 生成测试数据大型数据集的工具
14 mysql  linux  testing 

2
为什么插入索引表时无法获得最少的日志记录
我正在测试在不同情况下的最小日志记录插入量,以及从我读过的使用TABLOCK和SQL Server 2016+将具有非聚集索引的INSERT INTO SELECT读取到堆中的最少记录,但是在我这样做的情况下,完整日志记录。我的数据库处于简单恢复模型中,并且在没有索引和TABLOCK的堆上成功获取了最少日志记录的插入。 我正在使用Stack Overflow数据库的旧备份进行测试,并使用以下模式创建了Posts表的副本... CREATE TABLE [dbo].[PostsDestination]( [Id] [int] NOT NULL, [AcceptedAnswerId] [int] NULL, [AnswerCount] [int] NULL, [Body] [nvarchar](max) NOT NULL, [ClosedDate] [datetime] NULL, [CommentCount] [int] NULL, [CommunityOwnedDate] [datetime] NULL, [CreationDate] [datetime] NOT NULL, [FavoriteCount] [int] NULL, [LastActivityDate] [datetime] NOT NULL, [LastEditDate] [datetime] NULL, [LastEditorDisplayName] [nvarchar](40) NULL, …

2
为什么在解释知道答案时count(*)慢?
这个查询:select count(*) from planner_event需要很长时间才能运行-这么长的时间,我放弃并杀死了它。但是,当我运行时explain select count(*) from planner_event,我可以在输出中看到一列带有行数(14m)的列。 为什么解释可以立即获得行数,但是count(*)需要很长时间才能运行?
14 mysql  count  explain 

4
如何在CONCAT MySQL中排除NULL值?
如果我有这个-tadd是Address表: CONCAT(tadd.street_number, ' ', tadd.street_name,', ', tadd.apt_number,', ', tadd.city,', ', tadd.postal_code,', ', tadd.country) AS 'Address' 如果apt_number不存在,是否可以排除它? 我在想: WHERE tadd.apt_number IS NOT NULL 但是它将只返回带有的行apt_number,即使某些方法有效,我该如何处理该多余的逗号。 如果重复,请在评论中发布链接。
14 mysql  null  concat 

5
如何检查PostgreSQL服务器的SSL证书?
假设有一个正在运行的PostgreSQL服务器并且已启用SSL。使用“标准” Linux和PostgreSQL工具,如何检查其SSL证书? 我希望输出的结果类似于您从运行中得到的结果openssl x509 -text ...。而且我希望得到一两个命令行的答案,因此我不必求助于运行数据包嗅探器。 我无权访问PostgreSQL服务器,因此无法直接查看其配置文件。 我没有超级用户登录名,因此无法获取ssl_cert_file设置的值,然后pg_read_file就不能对其进行设置。 使用openssl s_client -connect ...不起作用,因为PostgreSQL似乎不想立即进行SSL握手。 通过快速浏览psql文档,我找不到命令行参数,该参数使它在启动时显示该信息。(尽管它确实向我显示了某些密码信息。)

1
如何在PostgreSQL中原子替换表数据
我想替换表的全部内容,而不会影响SELECT过程中的任何传入语句。 用例是拥有一个表,该表存储定期提取的邮箱信息,并且需要将其存储在PostgreSQL表中。有许多客户端正在使用不断查询同一张表的应用程序。 通常,我会做类似(伪代码传入)的操作... BEGIN TRANSACTION TRUNCATE TABLE INSERT INTO COMMIT 但不幸的是,在此过程中无法读取该表。由于需要花费时间INSERT INTO。该表已锁定。 在MySQL中,我本可以使用其原子RENAME TABLE命令来避免这些问题... CREATE TABLE table_new LIKE table; INSERT INTO table_new; RENAME TABLE table TO table_old, table_new TO table; *atomic operation* DROP TABLE table_old; 如何在PostgreSQL中实现呢? 出于这个问题的目的,您可以假设我没有使用外键。
14 postgresql 

1
如何使用“ WHERE字段为NULL”索引查询?
我的桌子上有很多插入物,将(uploaded_at)字段之一设置为NULL。然后,定期任务选择所有元组WHERE uploaded_at IS NULL,对其进行处理并更新,将其设置uploaded_at为当前日期。 我应该如何索引表? 我了解我应该使用部分索引,例如: CREATE INDEX foo ON table (uploaded_at) WHERE uploaded_at IS NULL 或类似的东西。我有点困惑,但是如果对一个始终为的字段进行索引是正确的话NULL。或者使用b树索引是否正确。哈希看起来是个更好的主意,但是它已经过时了,不能通过流热备份复制来复制。任何建议将不胜感激。 我已经尝试了以下索引: "foo_part" btree (uploaded_at) WHERE uploaded_at IS NULL "foo_part_id" btree (id) WHERE uploaded_at IS NULL 并且查询计划程序似乎总是选择foo_part索引。explain analyse也会为foo_part索引产生更好的结果: Index Scan using foo_part on t1 (cost=0.28..297.25 rows=4433 width=16) (actual time=0.025..3.649 rows=4351 loops=1) Index Cond: (uploaded_at …


1
使用LDAP通过Oracle Instant Client查找名称
完全由于Oracle客户端的完整安装版本冲突或版本不完整,部分原因是我的开发团队(我是其成员)一直在使用Oracle Instant Client,并避免在大多数情况下在我们的开发计算机上安装新项目。效果非常好,甚至达到我们通过此设置部署到生产的程度。由于我们主要是.NET商店,因此我们使用的是本机客户端(带有.NET包装器),而不是Java。 现在,客户要求我们在LDAP服务器上注册数据库服务,并使用LDAP服务器进行名称查找。他们提供的文件sqlnet.ora和ldap.ora文件(以及随附的加密配置文件)看起来是正确的。特别是,该sqlnet.ora文件确实将LDAP指定为查找网络服务名称的可能来源: names.directory_path=(tnsnames,ldap) 我确信我正在使用的计算机可以使用LDAP访问服务,因为我可以使用SQL Developer(这使我可以直接输入LDAP信息)进行访问。假设它们是正确的,我如何才能使Instant Client识别此配置并使用LDAP进行名称查找? 到目前为止我尝试过的 我尝试将TNS_ADMIN环境变量设置为包含提供的文件的目录,尽管此方法对于使Instant Client识别tnsnames.ora文件效果很好,但似乎不足以让它开始查看LDAP。结果如下(更改了路径,用户名和密码): (以下命令碰巧是Windows命令提示符,但我想在Linux上也可以执行类似的操作。sqlplus这里也显示了Instant版本,并且在同一目录中附带有Instant Client二进制文件。) C:\TEMP>SET TNS_ADMIN=C:\path\to\sqlnet\ldap\and\tnsnames\ora\files C:\TEMP>echo %TNS_ADMIN% C:\path\to\sqlnet\ldap\and\tnsnames\ora\files C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LOCALTNSNAME SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:22:25 2014 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production …
14 oracle 

3
比较两个相似的Postgres数据库的差异
我偶尔以Postgres dBs的形式下载可公开获得的数据集。这些数据集由存储库主机随时间更新/修改/扩展。 是否有Postgres命令或工具(最好是FOSS)可以显示旧的和新的Postgres数据库之间的差异?(一个可行的假设是95%的条目未更改,并且表和关系也未更改)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.