AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[datatypes](dba)

Martin Hope
Mikko Ohtamaa
Asked: 2022-07-31 22:19:29 +0800 CST

对所有列禁用 TOAST 压缩

  • 4

我在压缩的 ZFS 文件系统上运行 PostgreSQL 。提到的一个技巧是禁用 PostgreSQL 的内联 TOAST 压缩,因为 ZFS 可以更好地压缩数据。这可以通过将列存储设置为 来完成EXTERNAL。

我可以通过以下方式逐列执行此操作:

ALTER TABLE my_table ALTER COLUMN my_column SET STORAGE EXTERNAL;

但是,这可能有点麻烦,因为每个模式都需要手动迁移到这里。

有没有简单的方法

  • 将所有列的默认设置STORAGE为EXTERNAL而不是MAIN
  • 以其他方式禁用 TOAST 压缩

我找到了default_toast_compression 选项,但文档不清楚我是否可以禁用它。

postgresql datatypes
  • 1 个回答
  • 120 Views
Martin Hope
Hoopes
Asked: 2021-10-13 06:36:47 +0800 CST

具有约束的 Postgres 自定义类型

  • 0

我想知道是否有可能(和/或可取)创建对值有约束的自定义类型。假设我有一个高度/宽度/长度的自定义类型:

CREATE TYPE dimensions AS (w float, h float, l float);

我想确保我的宽度都不大于 10(例如)。

这样的事情是否可能,或者我会更好地为使用这种类型的每个表创建检查约束?我希望能够在一个地方(即类型本身)添加/编辑约束。

谢谢!

postgresql datatypes
  • 1 个回答
  • 238 Views
Martin Hope
mfinni
Asked: 2021-10-06 11:42:21 +0800 CST

如何查找存储过程和表之间的类型不匹配(隐式转换)?

  • 3

我有一个包含这些行的存储过程

DECLARE @newTimestamp datetime = CURRENT_TIMESTAMP
UPDATE  dbo.Accounts
SET     Modified = @newTimestamp

但是,在 Accounts DB 中,我们有这个

[Modified]         DATETIME2 (7) NOT NULL,

然后每当我们进行比较(特别是平等)时,我们都没有得到想要的答案。我们已经通过将兼容性级别设置得足够低(110)来解决这个问题,但是有没有简单的方法可以找到我们的存储过程与表中的数据类型不匹配的任何实例?

我宁愿不必编写解析器,但似乎如果必须,我会遍历每个表定义并记录列类型,然后找到每列的每次使用并尝试确定它是否被设置或与声明为不同类型的变量相比。

是否有任何工具已经可以做到这一点,或者系统视图或日志中的某处是否存在投诉?

我发现 Brent Ozar 的 sp_blitzcache 可能会在查询计划中找到它,但不能保证缓存将具有给定数据库的每个实例;我认为我对代码的静态分析而不是实时查看正在运行的 SQL 服务器感觉更舒服。我可以访问(许多)数据库的实时副本,以及 Visual Studio 中 SQL 解决方案的源代码。

编辑 - 与我的问题无关,但我可以提供背景。当我们有一个日期时间时,它在小数点后有 3 位精度。当我们有一个 datetime2 时,它有 7 位精度。如果您采用单个时间戳,并尝试比较同一时刻的 datetime 和 datetime2,它们将不相等。

如果我们将兼容性级别固定为 110,它会忽略 datetime2 的额外准确性,这是我们当前的行为。

sql-server datatypes
  • 1 个回答
  • 60 Views
Martin Hope
Optimum
Asked: 2021-08-27 08:02:36 +0800 CST

使用数字字符串帮助理解 try_cast() 的行为

  • 1

try_castErwin为 postgres制作了一个很棒的通用函数(复制如下)。我有兴趣将它用于 EAV 模式,其中属性与类型字段一起存储。我可以使用类似的函数(返回布尔值)作为触发器,测试值字符串是否可以转换为相应的数据类型以添加​​一些类型安全性。

CREATE OR REPLACE FUNCTION try_cast(_in text, INOUT _out ANYELEMENT) AS
$func$
BEGIN
   EXECUTE format('SELECT %L::%s', $1, pg_typeof(_out))
   INTO  _out;
EXCEPTION WHEN others THEN
   -- do nothing: _out already carries default
END
$func$  LANGUAGE plpgsql;

但是在测试它时(在 PG11 中),我发现如果将十进制数字字符串转换为整数类型(smallint、int 和 bigint),它会失败 - try_cast('50.0', NULL::int)。我猜这是因为 postgres 在转换为整数之前不能将字符串转换为数字/十进制类型(这是有道理的)。try_cast('50.0', NULL::numeric)确实有效,所以我可能会称之为足够好。

但是,我玩了这条线:

EXECUTE format('SELECT %L::%s', $1, pg_typeof(_out))

并将其更改%L为%s:

EXECUTE format('SELECT %s::%s', $1, pg_typeof(_out))

并且try_cast('50.0', NULL::<integer-type>)没有问题。缺点是其他类型,例如macaddr/cidr,在它们之前工作时无法转换

try_cast('192.168'::text, NULL::cidr) -- returns null
-- but 'SELECT '192.168'::cidr' works

我真的很好奇为什么%s修复了数字类型转换并破坏了其他类型,以及是否有任何方法可以改进函数以满足这种极端情况。如果没有,我可以忍受numeric,但我担心其他人将来使用这个功能而不了解它的局限性。

感谢您的任何帮助或想法!

postgresql datatypes
  • 1 个回答
  • 217 Views
Martin Hope
LaVache
Asked: 2021-07-05 01:30:12 +0800 CST

Postgres 元数据:获取所有 MATERIALIZED VIEW 列的列表,具有数据类型,包括数组列

  • 0

我需要获取有关所有 MATERIALIZED VIEW 列的元数据,包括它们的数据类型。我可以用这个查询来做到这一点:

SELECT 

trim(leading '_' from pg_type.typname) as data_type,
pg_namespace.nspname as schema_name, 
pg_namespace.nspname as udt_name, 
attnum AS ordinal_position,
pg_attribute.attname as column_name,
pg_class.relname as matview_name, 
'-------' AS spacer,
*


from pg_catalog.pg_attribute
join pg_catalog.pg_class ON pg_class.oid = pg_attribute.attrelid
join pg_catalog.pg_namespace ON pg_namespace.oid = pg_class.relnamespace
join pg_catalog.pg_type ON pg_type.typelem = pg_attribute.atttypid
where 
    pg_class.relkind = 'm' AND
    not pg_attribute.attisdropped and 
    cast(pg_type.typanalyze as text) = 'array_typanalyze' and 
    pg_attribute.attnum > 0
order by 
    pg_attribute.attnum

但是它没有列出任何数组列,因为它们不存在于pg_catalog.pg_type表中(这是我从中获取数据类型的表)。

我如何也可以获得数组列的元数据(包括类型)?

我正在使用 postgres 13.3。

postgresql datatypes
  • 1 个回答
  • 373 Views
Martin Hope
Felipe
Asked: 2021-06-08 18:39:27 +0800 CST

无需停机即可将 postgres varchar[] 转换为 text[]

  • 2

正如我在研究这个问题时发现的那样,将列从 转换varchar(100)[]为text[]需要表重写和重建索引。

有没有一种方法来管理这种转换,而无需像这个问题中使用的那样通过一些目录诡计进行锁定和重写?如果可能的话,对第 10 版特别感兴趣

postgresql datatypes
  • 2 个回答
  • 234 Views
Martin Hope
Kamalakannan J
Asked: 2021-05-23 11:04:39 +0800 CST

当 varchar 更高效时,为什么数据库具有 char 数据类型?

  • 3

我了解占用固定长度的数据类型CHAR和占用空间的数据类型之间的基本区别是基于存储的内容。VARCHARCHARVARCHAR

但是,如果VARCHAR根据存储的内容动态处理空间管理如此有效,为什么数据库支持CHAR数据类型,所有CHAR(n)字段都可以是VARCHAR(n)字段,对吧?

datatypes storage
  • 2 个回答
  • 1019 Views
Martin Hope
Evan Carroll
Asked: 2021-05-12 14:20:58 +0800 CST

SQL Server 的 is_nullable 有什么意义吗?

  • 1

SQL Server 有一个类型标志,称为is_nullable您可以在sys.types. 目前,(SQL Server 2019)它只设置为FALSE两种类型,sys.timestamp和sys.sysname. 对sys.timestamp这种类型似乎接受null。在sys.sysname它没有。这种行为有什么解释吗?

你可以看到这些类型

SELECT * FROM sys.types WHERE is_nullable = 0;  
SELECT TYPEPROPERTY('timestamp', 'AllowsNull');  -- returns 0

你可以像这样使用它,

CREATE TABLE foo ( a sys.timestamp );
INSERT INTO foo (a) VALUES ( null );

请注意,如果您使用,这将不起作用sys.sysname

Msg 515 Level 16 State 2 Line 1
Cannot insert the value NULL into column 'a', table 'dbo.foo'; column does not allow nulls. INSERT fails.
Msg 3621 Level 0 State 0 Line 1
The statement has been terminated.

如果您创建用户定义的数据类型,它也将不起作用,NOT NULL

CREATE TYPE bar FROM int NOT NULL;

这只是对用户的提示吗?

sql-server datatypes
  • 2 个回答
  • 208 Views
Martin Hope
wha7ever
Asked: 2021-04-06 06:33:49 +0800 CST

Informix 列数据类型有哪些?

  • 3

我正在编写一个查询,我需要知道一列是否属于“BLOB”类型的列。根据此文档 ,通常 41 是“BLOB”类型的列的数量。但是,当我查询syscolumns表时,我看到存储 BLOB 数据的列在我的情况下实际上具有 297 的值。上面链接的那个页面甚至在其页面上的任何地方都没有数字“297”。我找到了另一个页面,标题为“数据类型常量”,但在这里,数字“297”甚至没有出现在页面上的任何地方。

文档的数据类型列表似乎不完整。Informix 中是否有(更多)完整的列类型列表?

datatypes informix
  • 2 个回答
  • 723 Views
Martin Hope
anion
Asked: 2020-06-11 10:32:10 +0800 CST

具有特定大小的哈希值的 Sqlite Affinity

  • 0

我必须在 sqlite-database 中存储许多 SHA256 值,现在我想知道哪个 sqlite-affinity 是正确的。SHA256 值的输出长度为 256bit=32byte。我正在寻找可以处理此问题但也不会“浪费”磁盘空间的 sqlite-affinity,因为在我的情况下,我有很多数据集。我在这个网站上阅读了很多关于 sqlite 中数据类型的有用信息,但我仍然不知道哪种类型对于 SHA256 值是正确的。我更喜欢像“bytearray(32)”这样的东西,所以我认为varchar(32)可能是那个。但后来我记得我可能无法将所有这些字节转换为可打印字符以将它们存储为字符数组。所以看来我必须使用Blob.

不幸的是,并没有真正找到有关限制 sqlite 中的Blob-size 以及 sqlite 如何在内部处理 blob 的任何有用信息。我想使用我的哈希值始终具有相同长度的信息来优化数据库的磁盘使用:我希望 sqlite 知道对于这个Blob-column 它总是只需要保留 32 个字节,永远不会更多。所以我想使用类似Blob(32)列类型的东西。这可能吗?如果是的话:这有意义还是有任何谬误?

sqlite datatypes
  • 1 个回答
  • 105 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve