我正在数据库中寻找一条我不了解的精确信息。数据库在一台单独的机器上,但我可以登录它,并psql以管理员权限启动命令行。
这是第三方产品,他们回答问题的速度很慢。我知道数据在那个数据库里面,所以我想做一点逆向工程。
给定一个表名,是否可以获得该表中列名的列表?
例如,在 SQL Server 中,可以将表转储到可重用CREATE语句中,该语句以文本方式列出了该表所包含的所有列。
是否有 PostgreSQL 查询或命令返回查询、表或视图的字段名称和字段类型?
例如,如果应用于简单的 SELECT 查询的解决方案SELECT * from person应该返回如下列表:
Column Name | Column Type
===========================
First Name | character
Last Name | character
Age | integer
Date of Birth | date
Run Code Online (Sandbox Code Playgroud)
我查看了information_schema下面的答案中描述的视图,它似乎很好地涵盖了表格,我怀疑它也涵盖了视图,但我还没有检查过。
最后一个是任意但有效的 SELECT 查询,例如涉及数据库中的JOINS、 UNIONS等。是否有内置过程或其他存储过程或脚本可以为任何有效的 QUERY 返回相同的结果?
我正在开发一个程序来创建数据和查询表单,数据验证和对返回的数据执行函数需要这些信息。
我在 PostgreSQL 中创建了一些新的 UDT。但是,现在我有两个问题:
不幸的是,我在 PostgreSQL 文档中找不到任何相关内容。
是否有一种“优雅的内置”不区分大小写的方式来检查 db 是否存在?
我只找到了SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname',但这是 CS 检查。想到的第一件事是检索所有数据库名称并手动过滤它们,但我认为有更优雅的方法来做到这一点。
我正在为一个应用程序编写一个安装脚本,该脚本是另一个应用程序的插件,所以我想检查另一个应用程序的表是否存在。如果没有,我想给用户一个有用的错误。但是,我不知道什么模式将保存这些表。
DO LANGUAGE plpgsql $$
BEGIN
PERFORM 1
FROM
pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
n.nspname = current_setting('search_path')
AND c.relname = 'foo'
AND c.relkind = 'r'; -- not sure if I actually need this or not...
IF NOT FOUND THEN
RAISE 'This application depends on tables created by another application';
END IF;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
但是,current_setting('search_path')返回"$user",public默认包含的 TEXT ,这不是很有用。
我唯一能想到的另一件事是尝试从表中选择并捕获异常。它可以完成这项工作,但我认为它不是很优雅,而且我读到它使用起来很昂贵(尽管在这种情况下可能没问题,因为我只运行一次?)。
我们目前正在使用 SSIS 2012。有没有办法让用户在没有 ssis_admin 或 sysadmin 的情况下查看 SSIS 目录下的执行报告?
这是针对生产环境的,我们不希望人们操纵 SSIS 目录项目。
谢谢!
我正在将 SQL Server DB 迁移到新实例。
有人告诉我,可以从系统目录中的可用备份动态构建 RESTORE 脚本。
有谁知道一个示例脚本来做到这一点?
谢谢!
在 Postgres 9.4 中,我试图提取UNIQUEPostgres 中给定表的约束中涉及的所有列的名称。
看起来此类列的名称包含在pg_constraint. 根据文档,与我的问题相关的列称为conkey,它恰好是一个ints数组。
关键是,我提出的查询给了我错误的结果,我很确定这是因为我conkey以错误的方式加入。查询如下:
SELECT
pg_attribute.attname,
pg_constraint.*
FROM
pg_attribute
INNER JOIN pg_constraint
ON pg_attribute.attnum = ANY (pg_constraint.conkey)
WHERE pg_constraint.conrelid = (
SELECT
oid
FROM
pg_class
WHERE
relname LIKE 'test_table'
)
AND pg_constraint.contype = 'u'; -- to filter out non-unique constraints
Run Code Online (Sandbox Code Playgroud)
这是一个用于快速重现的表 DDL:
CREATE TABLE "test_table" (
"date" date DEFAULT now() NOT NULL,
"foo" varchar COLLATE "default" NOT NULL
CONSTRAINT "test_table_foo_key" UNIQUE ("foo")
) …Run Code Online (Sandbox Code Playgroud) 我正在查询 Postgresql 9.6.4 中的系统目录
获取表的结果集及其索引很简单,我缺少的是索引类型(BTREE、BRIN 等)。我似乎无法在系统目录中的任何位置找到索引类型。
如何查询目录以获取索引列表及其类型?
注意:我了解所涉及的风险,以及这样做可能会破坏生产系统。反正我有兴趣去做。
每当我尝试使用系统目录时,都会遇到这些奇怪的错误,
UPDATE sys.sql_logins
SET password_hash = PWDENCRYPT('pass')
WHERE name = 'sa';
Run Code Online (Sandbox Code Playgroud)
错误产生,
消息 259 [...]不允许对系统目录进行临时更新。
我尝试了很多方法来取下训练轮,
sp_configure 'allow updates',`
go
reconfigure
go
Run Code Online (Sandbox Code Playgroud)
但是,我想不出正确的选择......
它甚至在这个答案中说:
这不再可能(至少除了
sp_configure选项之外,还需要跳过大量额外的箍- 这不是您想要在生产系统上做的事情),并且所有系统目录现在都通过只读视图公开像 sys.objects。
好吧,如果我想跳过这些箍怎么办。我该怎么做?
catalogs ×10
postgresql ×7
sql-server ×2
array ×1
automation ×1
datatypes ×1
fields ×1
join ×1
linux ×1
metadata ×1
permissions ×1
plpgsql ×1
restore ×1
scripting ×1
ssis-2012 ×1