我的 PostgreSQL 默认端口是 5432,我想通过使用命令行(在 Windows 7 中)更改默认端口。
我之前看到过这个解决方案:https : //stackoverflow.com/questions/187438/want-to-change-pgsql-port
我尝试运行以下命令,但失败了:
postgres --p 5431
Run Code Online (Sandbox Code Playgroud)
有人能告诉我如何使用命令行更改端口吗?
在数据库中存储单个记录的元数据的最佳实践是什么?
我需要在我的数据库中存储许多表的常见元数据,例如创建时间和上次更新时间。我找到了几种不同的解决方案:
将元数据直接存储在表中。
优点:
缺点:
创建一个通用元数据表,并使用软外键将数据链接到正确的表和记录。
优点:
缺点:
为每个需要元数据的表创建单独的元数据表。
优点:
缺点:
是否有比我在这里提到的更多的选择、优点或缺点?存储这些元数据的最佳实践是什么?
我已经在运行 Ubuntu 12.04 和 13.04 的 2 个虚拟机上从 APT 存储库成功安装了 PostgreSQL 9.3……但是,我无法在运行 Ubuntu 12.04 的主机上正确安装它。
安装(这次)似乎没问题,但也许有一个我不明白的错误:
* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data /var/lib/postgresql/9.3/main
locale en_US.UTF-8
port 5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.
Run Code Online (Sandbox Code Playgroud)
所以我然后尝试将自己添加为 PostgreSQL 用户,但我得到了这个:
createuser: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections …Run Code Online (Sandbox Code Playgroud) 当我使用 MySQL 时,我可以运行一个命令,将 SSH 连接到我的服务器并将数据库复制到我的本地机器上。
ssh -t remoteserver 'mysqldump --compress -u dbuser --password="password" db_name' | /usr/local/mysql/bin/mysql -u root --password="password" local_db_name
Run Code Online (Sandbox Code Playgroud)
我如何用 PostgreSQL 做同样的事情?
我需要将一些随机值放入数据库,但我不想最终得到完全随机的文本(如 7hfg43d3)。相反,我想随机选择自己提供的值之一。
我有一个其他人创建的数据库表,它的 PK 是“uuid”类型的单列。我正在努力按该列执行简单的选择。我尝试过但没有成功的例子:
select from site where id = "9d4da323-4c20-360f-bd9b-ec54feec54f0"
select from site where id = UUID('9d4da323-4c20-360f-bd9b-ec54feec54f0')
select from site where id::text = '9d4da323-4c20-360f-bd9b-ec54feec54f0'
正确的语法是什么?
PostgresSQL wiki建议寻找最佳数据库连接池大小的规则。
数量 = ((core_count * 2) + effective_spindle_count)
但它没有解释有效主轴数是多少以及如何找到该值。
我目前在生产环境中运行 PostgreSQL 9.4,但我们正在服务器上进行操作系统升级,因此我认为可能是时候将 PostgreSQL 版本升级到最新版本 (12),以便我可以利用一些可用的新功能。然而,各个数据库中的一些表是很久以前构建的(例如,2008 年之前,至少在某些情况下很可能是 2000 年之前)。这些数据库包含许多使用 OID 的表(WITH OIDS=TRUE在定义中)。
此外,我还对大部分代码库进行了搜索,以查找任何表中对 OID 列的引用,并发现了几个实例,其中存在显式调用 OID 列的查询。幸运的是,这样的情况并不多,而且大多数都是引用系统表(即,SELECT oid FROM pg_namespace,...FROM pg_class)。
对从 9.4 数据库转储的数据运行pg_upgrade该过程会在此时停止,并断然声明直到数据库中没有 OID 后才会继续。据我所知,他们在过去的几个版本中一直在慢慢地逐步淘汰这些内容,而 12 版本使它们基本上变得无关紧要,但建议是在pg_upgrade继续之前完全删除 OID 列。我认为这对于一个几乎不相关的专栏来说是“矫枉过正”。
此时 - 我承认我还没有完全考虑到这一点 - 我想知道简单地“翻转”WITH OIDS受影响的表定义中的开关是否FALSE足以继续升级?如果翻转的话,现有的 OID 列是否仍是数据库结构的一部分(我认为会,但自动升级可以做一些有趣的事情)?
我意识到,在理想情况下,我希望最终从数据库中完全消除 OID。然而,作为一个单人 IT 部门,这必须“列入清单”以供以后评估。目前,我只是想让数据库在最新的 PostgreSQL 版本上启动并运行,同时我有机会这样做而不会立即影响操作。
假设我想要一个复合类型的地址,例如:
create type address as (
city text,
address_line text,
zip_code int
);
Run Code Online (Sandbox Code Playgroud)
为了使数据完整性更好,我不想允许NULLs 成为city、address_line或 的成员zip_code。所以我想对not null这些字段进行限制。
创建域检查对我来说不起作用。所以这段代码会产生错误:
create domain address_domain as address
check (
value.city is not null and
value.address_line is not null and
value.zip_code is not null
);
Run Code Online (Sandbox Code Playgroud)
您可能会说:“那么,为什么不将地址存储为三列,并向字段添加约束呢?”。我会回答说,我希望能够使地址本身可以为空,但如果地址存在,那么它的所有字段也应该存在。像这样的东西:
create table companies (
id serial primary key,
name text not null,
headquaters address -- this one can be null tho
)
Run Code Online (Sandbox Code Playgroud) 我应该如何在不使用 PostGIS 的情况下在 Postgres 中表示纬度和经度?我使用的系统不允许 SQL passthrough,所以我不能使用 POSTGIS。