小编Eva*_*oll的帖子

基于大型记录的数学数据库的平台是什么?

嗨,我是一名土木工程师,有一些编程经验,但我不熟悉当今可用的大量选项。希望你能给我任何指示最好的方法。

我想以网格格式制作和查询地面测量数据的数据库。在土方作业的不同时间,每个网格位置都会有许多测量值,因此存在时间的第 4 维。

观察结果很可能是从文本文件中读入的。在每条记录中都会有一个(2 x 整数)网格位置(行和列)一个(浮点)地平面和各种字符串信息代码(总共可能多达 30 个字符)。

网格可以是大约 10000 行 x 10000 列。并非网格上的每个位置在每次调查中都有记录,但通常最多有一百条记录。许多网格位置根本没有记录(该站点不会是完美的矩形)。

我想搜索记录、提取数据并进行计算,例如计算每个网格位置的最低或最高地平面。我相当有信心,我有能力用诸如 FORTRAN、BASIC 或 C 之类的语言使用数组相当简单地进行编程。虽然很多数组元素都是空的,但我猜这不是正确的方法,像这样的大型数据库需要特殊的工具,我必须学习如何使用。

我正在考虑平台的可能选项 -

  1. 使用数据库程序。我不熟悉这些功能有多强大,但我想它们会在 GUI 上产生很多开销。

  2. 使用 SQL?这我不太了解,但它似乎是数据库的语言。我一直使用命令式语言而不是声明式语言,正如我从维基百科了解到 SQL 是声明式的,我对这种变化有点紧张。我不完全了解使用它的过程。是否有制作控制台程序的编译器?数据库是否存储在磁盘上?抱歉问了这么愚蠢的问题。

  3. 使用像 c-treeACE 这样的 API?我认为这可能是让我熟悉“​​做这个,然后做那个”语言的方式(不幸的是,这就是我作为工程师的想法!)。但我希望 API 提供的幕后内存和处理管理将优于我使用大型数组所能实现的。

  4. 或者我可以用面向对象的语言来做,让计算机担心存储要求。例如,如果我将记录存储为具有方法和属性的对象,这些方法和属性可以帮助我从每条记录中获得我需要的结果 - 与 3 相比,它会是一个巨大的臃肿程序吗?

可能有数亿条记录,我希望能够在运行 Windows 的现代 PC 上在几分钟而不是几小时(最好是几秒钟!)内查询和处理它们。更具体地说,我的是带有 6Gb ram 和 120Gb SSD 的 i7 处理器,运行 Windows 7 64 位。

希望有人有时间与新手分享几句智慧之词。

windows database-recommendation record

11
推荐指数
1
解决办法
258
查看次数

PostgreSQL 用户更改密码后无法连接到服务器

我已经用我创建的 4 个角色遇到了这个问题:
使用 GUI (1) 在 pgAdmin III 中更改用户的密码后,该用户无法再登录。
pgAdmin III 显示错误信息:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"
Run Code Online (Sandbox Code Playgroud)

我的系统:Ubuntu 12.04 上的 Postgresql 9.2

有没有什么办法解决这一问题?

(1): 使用 postgres 帐户登录,在登录角色中右键单击用户,转到“定义”选项卡并输入密码

postgresql pgadmin-3

11
推荐指数
1
解决办法
5万
查看次数

SQL Spec 是否需要在 EXISTS() 中使用 GROUP BY

Microsoft 当前允许使用此语法。

SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
  SELECT *
  FROM ( VALUES (1),(1) )
    AS t(x)
  WHERE g.x = t.x
  HAVING count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)

请注意,没有GROUP BYEXISTS条款,是有效的ANSI SQL。或者它只是暴露了一个实现细节。

作为参考,PostgreSQL 中不允许使用相同的语法。

错误:列“tx”必须出现在 GROUP BY 子句中或用于聚合函数中

但是这种语法是允许的..

SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
  SELECT 1  -- This changed from the first query
  FROM ( VALUES (1),(1) )
    AS t(x)
  WHERE g.x = t.x
  HAVING count(*) …
Run Code Online (Sandbox Code Playgroud)

postgresql sql-server group-by sql-standard exists

11
推荐指数
1
解决办法
2438
查看次数

什么函数在带有 SQL Server 的动态 sql 中引用标识符?

什么是用于动态 sql 生成的安全引用标识符的 SQL Server 方法。

我如何确保为动态生成的语句提供动态生成的列名,该列本身不是 SQL 注入攻击。

假设我有一个 SQL 语句,

SELECT [$col] FROM table;
Run Code Online (Sandbox Code Playgroud)

本质上与

'SELECT [' + $col + '] FROM table;'
Run Code Online (Sandbox Code Playgroud)

什么可以阻止注入攻击

$col = "name] FROM sys.objects; \r\n DROP TABLE my.accounts; \r\n\ --";
Run Code Online (Sandbox Code Playgroud)

导致

SELECT [$col] FROM table;
Run Code Online (Sandbox Code Playgroud)

security sql-server sql-injection

11
推荐指数
1
解决办法
1311
查看次数

如何创建在修改行时更新日期字段和时间字段的触发器?

testtable在数据库testbase中创建了一个具有以下结构的表:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
Run Code Online (Sandbox Code Playgroud)

但是,如何编写触发器,以便它更新已修改(或使用新信息更新)的特定行,并将修改日期记录到expire_date字段中,并将修改时间记录到expire_time字段中?(或者如果这是可能的?)

trigger sql-server-2008 row-modification-time

10
推荐指数
1
解决办法
5万
查看次数

如何在没有主键的情况下列出所有表?

我已经看到大量查询来列出主键和外键,但是如何查询缺少主键的表?

postgresql primary-key information-schema

10
推荐指数
2
解决办法
8604
查看次数

使用 CREATE TABLE AS SELECT 如何指定 WITH 条件 (CTE)?

PostgreSQL 中有一个旧的和不推荐使用的命令,它早于CREATE TABLE AS SELECT(CTAS)称为SELECT ... INTO .... FROM,它支持WITH子句/公共表表达式(CTE)。所以,例如,我可以做到这一点..

WITH w AS (
  SELECT *
  FROM ( VALUES (1) ) AS t(x)
)
SELECT *
INTO foo
FROM w;
Run Code Online (Sandbox Code Playgroud)

但是,我不能这样做..

WITH w AS (
  SELECT *
  FROM ( VALUES (1) ) AS t(x)
)
CREATE TABLE foo AS
SELECT * FROM w;
Run Code Online (Sandbox Code Playgroud)

或者,我得到

ERROR:  syntax error at or near "CREATE"
LINE 5: CREATE TABLE foo AS
Run Code Online (Sandbox Code Playgroud)

我将如何使用标准化的 CTAS 语法来做到这一点。

postgresql syntax cte sql-standard ctas

10
推荐指数
1
解决办法
1万
查看次数

PostgreSQL Upsert 不适用于分区表

有一张这样的表:

CREATE TABLE aggregated_master (
  "user"       BIGINT,
  type         TEXT,
  date         TIMESTAMP,
  operations   BIGINT,
  amount       NUMERIC,
  PRIMARY KEY ( "user", type, date )
);
Run Code Online (Sandbox Code Playgroud)

这张表是很多分区继承的主表。分区由 DATE 字段中的 MONTH 完成。例如:2017 年 8 月的分区将是 agg_201708,它的 PK 将是 pk_agg_201708 在插入之前通常会触发将插入重定向到正确的分区。

问题是我想在这个表中做一个 UPSERT。DO CONFLICT 部分不起作用。

最初的代码是这样的

INSERT INTO aggregated_master (user, type, date, oeprations, amount)
SELECT user, type, date, SUM(ops), SUM(amt)
FROM ...
WHERE ...
GROUP BY USER, TYPE, DATE
ON CONFLICT ON CONSTRAINT pk_aggregated
DO UPDATE SET operations = EXCLUDED.operations
          ,   amount = EXCLUDED.amount
Run Code Online (Sandbox Code Playgroud)

但是后来我注意到约束 …

postgresql plpgsql upsert

10
推荐指数
2
解决办法
5367
查看次数

Homebrew 安装 PostgreSQL 无法连接,数据库文件与服务器不兼容

这是我今天尝试使用以下命令登录到我的 localhost PosgreSQL 数据库时收到的错误消息psql

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我使用 Homebrew 安装了 PostgreSQL,今天早上我使用该实用程序卸载并重新安装了 PostgreSQL,没有观察到任何变化。该psql客户端工作正常,我仍然可以使用它来连接到网络上的数据库。我一两个月只连接到我的本地数据库一次,之前它运行良好,所以我假设这是由于一些自动更新,但我不知道是哪个。Mac OS 最近将自身升级到 High Sierra (10.13)。

2014 年这里出现了相同的错误消息(链接),但这是一个人在启动服务器时遇到问题的情况。就我而言,我相信它正在运行——我已经使用过brew services start postgresql,是的,我今天重新启动了几次。但是,错误中提到的文件 ,/tmp/.s.PGSQL.5432在我的系统上不存在。我认为这是一些配置错误的情况。任何人都知道如何解决?

更新:我尝试手动启动服务器(按照 Evan 的建议),我认为我取得了突破。这是我尝试手动启动时遇到的错误:

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this …
Run Code Online (Sandbox Code Playgroud)

postgresql psql mac-os-x

10
推荐指数
1
解决办法
2万
查看次数

如何对 PostgreSQL 物化视图进行增量刷新?

我正在查看 PostgreSQL 文档,其中:

REFRESH MATERIALIZED VIEW 完全取代了物化视图的内容。旧内容被丢弃。

但是,从 9.5 开始,我相信有一种方法可以更新 MV,而无需重新生成所有数据。

postgresql materialized-view

10
推荐指数
1
解决办法
9044
查看次数