数据库管理员

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

2
PostgreSQL:不可变,易变,稳定
我不清楚IMMUTABLE,VOLATILE和STABLE函数的定义的真正含义。 我阅读了文档,特别是每个文档的定义。 IMMUTABLE指示该函数无法修改数据库,并且 在给定相同的参数值时始终返回相同的结果;也就是说,它不执行数据库查找或以其他方式使用其参数列表中不直接存在的信息。如果指定了此选项,则可以使用函数值立即替换具有全常数参数的任何函数调用。 STABLE表示该函数无法修改数据库,并且在单个表扫描中它将针对相同的参数值一致地返回相同的结果,但其结果可能会在SQL语句之间发生变化。对于其结果取决于数据库查找,参数变量(例如当前时区)等的函数,这是适当的选择。(对于希望查询当前命令修改的行的AFTER触发器来说,这是不合适的。)还请注意, current_timestamp系列功能符合稳定条件,因为它们的值在事务中不会更改。 VOLATILE表示该功能值即使在一次表扫描中也可以更改,因此无法进行优化。从这个意义上说,相对来说很少有数据库函数是易变的。一些示例是random(),currval(),timeofday()。但是请注意,任何具有副作用的函数都必须归类为易失性,即使其结果是可以预测的,也可以防止调用被优化。一个示例是setval()。 我的困惑来自与不可改变的条件,稳定的功能总是或始终返回相同的结果给出了相同的论点。 IMMUTABLE定义指出该函数不进行数据库查找或以其他方式使用未直接存在于其参数列表中的信息。因此,对我而言,这意味着此类函数用于操作客户端提供的数据,并且不应具有SELECT语句……尽管这听起来有点奇怪。 使用STABLE时,定义是相似的,因为它表示应始终返回相同的结果。因此,对我来说,这意味着每次使用相同的参数调用该函数时,它应返回相同的结果(相同的行,每次相同)。 因此,对我来说...意味着对表或可更新表执行SELECT的任何函数都应仅是易失性的。 但是,再次...对我来说听起来不对。 回到我的用例,我正在编写函数,这些函数在不断添加的表上执行带有多个JOIN的SELECT语句,因此,即使每次调用时,即使使用相同的参数,也希望函数调用返回不同的结果。 。 那么,这是否意味着我的功能应该是挥发性的?即使文档表明在这种意义上相对较少的数据库功能也是易失的? 谢谢!

1
PostgreSQL:SSL SYSCALL错误:检测到EOF
首先,我已经搜索并找到了与该错误有关的几篇文章,并且其中大多数都指向RAM问题或SSL问题,我尝试通过在命令行中添加sslmode = disabled来克服SSL的可能性: psql -U waypoint -d waypoint -W -c "alter table telemetria_data.historico alter clase type smallint, alter valor type real[], alter power type smallint, alter voltaje type real;" -h localhost -v sslmode=disable 但是出现了相同的消息: SSL SYSCALL error: EOF detected connection to server was lost 关于可能的内存问题,我不知道如何解决它。 数据结构就是此问题中描述的结构,您可能会发现这将是一个运行时间很长的查询,可以完成所有继承表上的完整alter table。 作业系统: Linux ip-10-1-0-9 …

1
使用Join和Window函数获取超前和滞后值之间的性能比较
我有20M行的表,每一行有3列:time,id,和value。对于每个id和time,value状态为。我想知道的超前滞后一定的值,time为特定的id。 我使用了两种方法来实现此目的。一种方法是使用连接,另一种方法是使用窗口函数超前/滞后以及在time和上的聚集索引id。 我按执行时间比较了这两种方法的性能。join方法需要16.3秒,而window函数方法需要20秒,这不包括创建索引的时间。这使我感到惊讶,因为在join方法是蛮力的情况下,窗口功能似乎已被改进。 这是这两种方法的代码: 创建索引 create clustered index id_time on tab1 (id,time) 加盟方法 select a1.id,a1.time a1.value as value, b1.value as value_lag, c1.value as value_lead into tab2 from tab1 a1 left join tab1 b1 on a1.id = b1.id and a1.time-1= b1.time left join tab1 c1 on a1.id = c1.id and a1.time+1 …

6
由于会话处于终止状态,因此无法继续执行。在建立聚集索引时
尝试创建聚簇索引时出现以下错误 该语句已终止。 消息596,级别21,状态1,行0 无法继续执行,因为会话处于终止状态。 消息0,级别20,状态0,行0 当前命令发生严重错误。结果(如果有的话)应丢弃。 索引是: BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO CREATE CLUSTERED INDEX IX_CO_DES_INPUT ON dbo.CO_DES_INPUT(DESIGN_ID, PRODUCT_INPUT_NUM, INPUT_NAME) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = …

2
从表中任何列字段为空的行中删除
有没有一种方法可以从表中删除任何行字段为空的行,而无需明确指定哪一列为空? 我正在使用postgreSQL。 这是我的关系模式: Column | Type | Modifiers --------------+---------+---------------------------------------------------------------------- id | integer | not null default nextval('aurostat.visitor_center_id_seq'::regclass) date | date | persons | integer | two_wheelers | integer | cars | integer | vans | integer | buses | integer | autos | integer | 谢谢
11 postgresql 



1
为什么不信任PL / Python?
根据文档: PL / Python仅作为一种“不受信任的”语言提供,这意味着它不提供任何限制用户可以执行的操作的方式,因此被称为plpythonu。如果在Python中开发了安全的执行机制,则将来可能会使用受信任的变体plpython。 为什么要为Python开发安全的执行机制而不是为Perl这样的其他语言开发安全的执行机制到底为什么呢?

3
WITH CTE和WITH CTE(<column_names>)有什么区别?
如在MSDN上使用通用表表达式中所示,可以将CTE定义为: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) 并像这样使用它: SELECT &lt;column_list&gt; FROM expression_name; 假设我有2个CTE with cte1 as( select name from Table1 ) with cte2(name) as( select name from Table1 ) 由于内部查询相同,因此两个CTE的查询输出结果相同。两者之间的唯一区别是cte2(name)在其声明中定义了列name()。 当我执行两个CTE时,执行计划没有任何区别。 我只是好奇地知道: 如果我在CTE定义中未指定任何列名,会有什么区别? 为什么在创建CTE时应该/不应该指定列名? 它是否会偶然影响查询执行计划?(据我所知,这没有任何区别。)

6
如何在MS SQL Server上修复混乱的复制
我从备份还原了数据库。数据库使用复制发布到其他服务器。假设数据库还原会破坏复制,我尝试删除该复制并重新创建它(我们有一个脚本可以从头开始重新创建它)。我不确定自己所做的确切,但是现在它处于完全混乱的状态,我无法修复。 首先,我尝试摆脱订阅(在发布服务器上): EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName' 这似乎有效。SELECT * FROM syssubscriptions没有显示结果。在订阅服务器上,SSMS&gt; {SubscriberServer}&gt;复制&gt;本地订阅-订阅不存在。 因此,我尝试删除该出版物。SSMS&gt; {服务器}&gt;复制&gt;本地发布&gt; {PublicationName}&gt;删除。这给出以下错误信息: Could not delete publication 'PublicationName'. Could not drop article. A subscription exists on it. Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046) 好的,所以我尝试删除文章: EXEC sp_droparticle @publication = …

3
具有多个变体/属性的产品的架构设计?
我正在使用MySQL。这个想法类似于具有不同概念的shopify,因此用户将添加具有多种变体和属性类型的自己的产品。 从我所做的所有研究来看,这似乎是我最可能的解决方案,我只是想知道以下方案是否存在问题,还有哪些优点/缺点? 谢谢 Table: products ------------------------------ | ID | ProductName | |----------------------------| | 1 | Leather Wallet Case | | 2 | Jeans | | 3 | Power Bank | Table: products_variants ------------------------------- | ID | ProductId | ParentId | Variant | VariantName | SKU | StockTotal | WholeSalePrice | …

2
列的数字与整数-大小和性能
我有一个使用PostgreSQL表的应用程序。该表非常大(数十亿行),并且有一列是整数。 该integer可高达6个位数,即0-999,999,没有底片。 我考虑过将其更改为numeric(6,0)。 这是个好主意吗?会numeric(6,0)占用更少的字节吗?性能如何(该表被查询很多)?
11 postgresql 

4
正确的存储值的方式可能是多种不同的类型
我有一个答案表和一个问题表。 答案表中有值,但根据问题,这个值可以是一个bit,nvarchar或number(到目前为止)。该问题具有其预期答案值类型应为什么的概念。 在一个或另一个点解析这些Answer值非常重要,因为至少需要对这些数字进行比较。 对于更多情况,一些用户在各种调查中提供了问题和可能的答案(通常是文本框类型输入所允许的数据类型)。然后,其他指定的用户将提供答案。 我考虑过的几个选项是: A. XML或字符串,根据所需的类型进行不同的解析(在问题中始终保持跟踪) B.引用答案表(或由答案表引用)的三个单独的表,并根据预期的类型联接到其中。在这种情况下,我不确定设置约束的最佳方法,以确保每个问题只有一个答案,或者应该将其留给应用程序。 C. Answer表上的三个独立列可以根据预期的类型进行检索。 我很高兴就这些方法的优缺点获得一些意见,或者我没有考虑过的替代方法。

3
导入为VS DB项目后出现“对用户的未解析引用”
我只是将现有的SQL Server 2008r2生产数据库导入到VS 2013数据库项目中。 我现在遇到了一些错误 Error SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser]. 我实际上并不需要我的VS DB项目来管理用户,但是我担心如果不存在,它将在部署时尝试删除它们。 文件本身生成为 CREATE USER [mydbuser] FOR LOGIN [mydbuser]; 要么 CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser]; 错误标记表明它专门用于Login。由于这是一个系统级对象,因此我可以理解它超出了db项目的范围。 我是否全部将其更改为 CREATE USER [mydbuser] WITHOUT LOGIN; 或将CREATE LOGIN子句添加到每个文件的开头? 删除登录参考似乎更简单,而完全删除用户将是最简单的。 我想确保我按预期使用该工具。将这些重新发布回生产中是否会有任何问题?通过项目添加用户/登录的正确程序是什么?

3
实现基于并发表的队列的最佳方法
我在MySQL中有一张表,代表要处理的链接队列。链接由外部应用程序一个接一个地处理,最后被删除。这是一个高容量队列,我有多个处理应用程序实例,分布在多个服务器上。 如何确保每个记录仅由一个应用程序选择?有没有办法标记/锁定记录? 现在,为了避免两个或多个拾取同一链接,我允许每个实例仅拾取一组特定的记录(基于其ID的MOD),但这不是增加队列处理的透明方法通过添加新实例来提高速度。
11 mysql  queue 

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.