我有一个大数据库,需要从每个表中提取所有主键和外键。
我有 pgAdmin III。
有没有办法自动执行此操作而不手动查看每个表?
是否可以具有如下自定义唯一约束?假设我有两个 colssubset和type,两个字符串(尽管数据类型可能无关紧要)。
如果type是“真”,那么我希望的组合type,并subset是唯一的。否则,没有约束。我在 Debian 上使用 PostgreSQL 8.4。
postgresql index database-design constraint unique-constraint
我正在设计一个以不同语言存储数据的数据库(使用 UTF-8),所以我认为显示查询结果的最佳方式是在查询期间根据用户的语言对其进行排序(因为有多个正确的方法来做到这一点),如下:
SELECT a < b COLLATE "de_DE" FROM test1;
Run Code Online (Sandbox Code Playgroud)
假设这是处理国际数据的正确方法,那么对于数据库本身来说,哪种整理是最好的呢?PostgreSQL 文档说:
C 和 POSIX 排序规则都指定了“传统的 C”行为,其中只有 ASCII 字母“A”到“Z”被视为字母,并且严格按照字符代码字节值进行排序。
我认为这是这种情况下的最佳选择,还是我错了?
(额外的问题:在查询本身中选择排序规则是否太慢?)。
在我的应用程序中,我使用 C 代码在数据库中插入数据,因为我从不受信任的来源收到的字符串我已经使用PQescapeByteaConnlibpq 库对它们进行了转义。哪个工作得很好,即结果为八位字节格式字符串。看下面的例子,
输入字符串: \n\t\f\b\p\k\j\l\mestPrepared
输出字符串: \\012\\011\\014\\010pkjlmestPrepared
输出字符串被插入到数据库中。现在,我使用 JDBC 从 Java 代码中的数据库中检索该数据。如何将字符串转义回其原始值?
我想到了两种可能的方法,
我可以理解方法 1 会更有效。我已经尝试了这里列出的几乎所有功能,但没有任何效果。请帮忙!!
我在 linux 机器上使用 8.4 版的 postgres。
这是我的检查点日志的一部分:
2014-03-26 11:51:29.341 CDT,,,18682,,532854fc.48fa,4985,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 15047 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 30 recycled; write=68.980 s, sync=1.542 s, total=70.548 s; sync files=925, longest=0.216 s, average=0.001 s",,,,,,,,,""
2014-03-26 11:56:05.430 CDT,,,18682,,532854fc.48fa,4987,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 16774 buffers (1.6%); 0 transaction log file(s) added, 0 removed, 31 recycled; write=72.542 s, sync=17.164 s, total=89.733 s; sync files=885, longest=3.812 s, average=0.019 s",,,,,,,,,""
2014-03-26 12:01:21.650 CDT,,,18682,,532854fc.48fa,4989,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 14436 buffers (1.4%); 0 transaction log file(s) added, 0 removed, …Run Code Online (Sandbox Code Playgroud) 完整问题重写
我正在寻找 First() 聚合函数。
在这里,我发现了一些几乎有效的东西:
CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$
SELECT $1;
$$;
-- And then wrap an aggregate around it
CREATE AGGREGATE public.first (
sfunc = public.first_agg,
basetype = anyelement,
stype = anyelement
);
Run Code Online (Sandbox Code Playgroud)
问题是当 varchar(n) 列通过 first() 函数时,它会被转换为简单的 varchar(没有大小)。尝试在函数中将查询返回为 RETURNS SETOF anyelement,我收到以下错误:
错误:查询的结构与函数结果类型 Estado de SQL:42804 不匹配:返回的类型字符变化与第 2 列中的预期类型字符变化(40) 不匹配。上下文:PL/pgSQL 函数 vsr_table_at_time(anyelement,timestamp without time zone ) 第 31 行在 RETURN QUERY
在同一个 wiki 页面中,有一个指向该函数 …
如果我打开到 Postgres 的连接并发出长时间运行的查询,然后断开连接(例如,终止打开连接的客户端进程),长时间运行的查询会继续运行,还是会自动中止?这个可以配置吗?
(我使用的是 Postgresql 9.2.9)
我在 PostgreSQL 9.3 中使用了一个 PL/pgSQL 函数,里面有几个复杂的查询:
create function f1()
returns integer as
$$
declare
event tablename%ROWTYPE;
....
....
begin
FOR event IN
SELECT * FROM tablename WHERE condition
LOOP
EXECUTE 'SELECT f2(event.columnname)' INTO dummy_return;
END LOOP;
...
INSERT INTO ... FROM a LEFT JOIN b ... LEFT JOIN c WHERE ...
UPDATE T SET cl1 = M.cl1 FROM M WHERE M.pkcols = T.pkcols;
...
end
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
如果我跑了EXPLAIN ANALYZE f1(),我只会得到总时间,但没有细节。有没有办法可以获得函数中所有查询的详细结果?
如果函数中的查询不应该被 Postgres 优化,我也会要求解释。
谁能解释一下 LIKE 运算符是如何在当前数据库系统(例如 MySQL 或 Postgres)中实现的?或者指出一些解释它的参考资料?
天真的方法是检查每条记录,在感兴趣的字段上执行正则表达式或部分字符串匹配,但我有一种感觉(希望)这些系统做一些更聪明的事情。
mysql postgresql performance full-text-search pattern-matching
我已经在我的 PC (Win 7) 上安装了 PostgreSQL 9.1。我有一个使用login=sa和成功连接到它的小型 Java 应用程序password=""。连接有效。
但是,它被 PgAdmin III 本身拒绝。我得到:
Error connecting to the server: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)
如何使用空密码从 PgAdmin III 连接到我的数据库?
编辑
这只是一个测试,而不是生产代码。
postgresql ×10
functions ×2
index ×2
pgadmin ×2
aggregate ×1
bytea ×1
collation ×1
connections ×1
constraint ×1
encoding ×1
explain ×1
foreign-key ×1
mysql ×1
optimization ×1
performance ×1
plpgsql ×1
primary-key ×1
string ×1