使用Oracle,如何从systables/information_schema中找到索引名称和创建日期?
如何从systables/information_schema中复制创建索引的DDL,例如, create index indexname on tablename(column_name [, column_name....]) [local];
有很多信息可以从information_schema和pg_catalog中检索到postgresql.我想检索有关由某个索引索引的列的信息,类似于我pragma index_info(<index_name>)在sqlite3中实现的.如何在不解析create index语句的情况下实现这一目标?
我现有的表很少,我必须在其中修改各种列以使其具有默认值。
如何将默认值应用于的旧记录NULL,以便旧记录与新记录保持一致
ALTER TABLE "mytable" ALTER COLUMN "my_column" SET DEFAULT NOW();
Run Code Online (Sandbox Code Playgroud)
修改表后看起来像这样...
Table "public.mytable"
Column | Type | Modifiers
-------------+-----------------------------+-----------------------------------------------
id | integer | not null default nextval('mytable_id_seq'::regclass)
....
my_column | timestamp(0) with time zone | default now()
Indexes:
"mytable_pkey" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以使所有当前为空且具有默认值的列设置为默认值?
我需要一种智能方法,以一种可以在CREATE TABLE语句中使用的方式从INFORMATION_SCHEMA.COLUMNS中获取数据类型.问题是需要理解的"额外"字段,例如NUMERIC _PRECISION和NUMERIC _SCALE.
显然,我可以忽略INTEGER的列(精度为10,比例为0),但还有其他类型我会感兴趣,例如NUMERIC.因此,如果没有编写大量代码来解析表,那么有关如何从列定义中获取某种字段速记的任何想法?
我希望能得到类似的东西:int,datetime,money,numeric**(10,2)**
我知道这个主题(在数据库中查找未知表中的特定列?),我的问题非常相似.我需要的查询与此相似(我认为):
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%watcher%'
Run Code Online (Sandbox Code Playgroud)
但我需要的是一个查询,其中列名称未知,但我知道内容是什么,我想知道表/列的名称是什么.(我知道这听起来很奇怪: - /).我有可能吗?
假设我创建了降序索引
CREATE INDEX `MyTable.MyIndex`
USING BTREE ON `MyTable` (`DateFrom` DESC, `DateTo` DESC);
Run Code Online (Sandbox Code Playgroud)
我想从 获取有关它的信息information_schema。
根据文档 information_schema.statistics表完成这项工作。但是我找不到有关索引列顺序(即ASC或DESC)的任何信息。
我怎样才能找到这些信息?
我有一张名为兔子的桌子.我试图在我的表中找到平均行长度.我试过这个查询:
SELECT AVG_ROW_LENGTH(rabbits)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我已将虚拟生成的列添加到测试员工数据库中的工资表中,如下所示:
ALTER TABLE salaries
ADD COLUMN salary_k int AS (salary / 1000);
Run Code Online (Sandbox Code Playgroud)
现在,当我查询INFORMATION_SCHEMA.COLUMNS该EXTRA列时,该列按预期显示VIRTUAL GENERATED,但如何获取生成列的详细信息,即在本例中(salary / 1000)? COLUMN_DEFAULT显示NULL.
SHOW CREATE TABLE salaries显示结果中的详细信息,但我希望结果作为较大查询的一部分INFORMATION_SCHEMA,因此这对我不起作用。
我将一些information_schema查询转换为系统目录查询,并且字符最大长度得到了不同的结果。
SELECT column_name,
data_type ,
character_maximum_length AS "maxlen"
FROM information_schema.columns
WHERE table_name = 'x'
Run Code Online (Sandbox Code Playgroud)
返回我期望的结果,例如:
city character varying 255
company character varying 1000
Run Code Online (Sandbox Code Playgroud)
等效目录查询
SELECT attname,
atttypid::regtype AS datatype,
NULLIF(atttypmod, -1) AS maxlen
FROM pg_attribute
WHERE CAST(attrelid::regclass AS varchar) = 'x'
AND attnum > 0
AND NOT attisdropped
Run Code Online (Sandbox Code Playgroud)
似乎返回每个长度+ 4:
city character varying 259
company character varying 1004
Run Code Online (Sandbox Code Playgroud)
为什么会有所不同?总是简单地从结果中减去4是否安全?
在 Postgres 10 中我声明了以下内容:
create table test_abc (
pk integer not null,
id integer not NULL,
id2 integer not null,
PRIMARY KEY (pk)
);
CREATE UNIQUE INDEX test_abc_ids ON test_abc(id,id2);
Run Code Online (Sandbox Code Playgroud)
然后是第二个表,其中 FK 引用第一个表:
create table test_def (
id integer not null,
abc_id integer,
abc_id2 integer,
PRIMARY KEY (id),
FOREIGN KEY (abc_id,abc_id2) references test_abc(id,id2)
);
Run Code Online (Sandbox Code Playgroud)
现在考虑此查询的输出:
SELECT unique_constraint_catalog, unique_constraint_schema, unique_constraint_name
FROM information_schema.referential_constraints r
WHERE r.constraint_name = 'test_def_abc_id_fkey'
----------------------
NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
所有unique_constraint_*列都有空值。
从Postgres 文档看来这些元列应该包含
包含外键约束引用的唯一或主键约束的 [object] 的名称(始终是当前数据库) …
sql postgresql foreign-keys information-schema database-metadata
postgresql ×4
mysql ×3
sql ×3
indexing ×2
metadata ×2
sql-server ×2
foreign-keys ×1
innodb ×1
mariadb ×1
oracle ×1
row ×1
types ×1