我是 PostgreSQL 的新手,所以我的问题是:进行定期备份并将它们发送到 Google Drive 的最简单方法是什么。也许,有一种工具可以实现它或其他东西。
目前我有这个查询:
select
sum(case when my_table.property_type = 'FLAT' then my_table.price else 0 end) as Flat_Current_Asking_Price,
sum(case when my_table.property_type_mapped = 'SEMIDETACHED' then my_table.price else 0 end) as Semidetached_Current_Asking_Price
from
my_table;
Run Code Online (Sandbox Code Playgroud)
所以如果my_table有以下值:
property_type | price
--------------+-------
FLAT | 5000
SEMIDETACHED | 9000
FLAT | 6000
Run Code Online (Sandbox Code Playgroud)
查询将返回:
Flat_Current_Asking_Price | Semidetached_Current_Asking_Price
--------------------------+-----------------------------------
11000 | 9000
Run Code Online (Sandbox Code Playgroud)
如何替换将sum值累积到数组中以获取?
Flat_Current_Asking_Price | Semidetached_Current_Asking_Price
--------------------------+-----------------------------------
{5000, 6000} | {9000}
Run Code Online (Sandbox Code Playgroud) Postgres 10 获得了使用国际组件进行 Unicode (ICU)排序的能力,而不是依赖于主机操作系统的实现。请参阅Peter Eisentraut在 PostgreSQL 10 中使用 ICU 支持的更强大的排序规则。
那么在创建数据库时究竟如何指定 ICU 排序规则呢?
我确实在CREATE DATABASEto use 中阅读了一个提示,template0而不是template1iftemplate1可能是使用编码和整理而不是您想要的新数据库创建的。并且在使用时template0,您需要启用数据连接以覆盖默认值。
我在 Postgres 10 doc page for Collation Support中读到:
und-x-icu(用于“未定义”)
ICU“根”整理。使用它来获得合理的与语言无关的排序顺序。
因此,und-x-icu在建立包含多语言文本的新数据库时,这似乎是一个很好的使用价值。当已知某种语言专注于特定语言时,该SELECT命令可以指定另一种排序规则,例如 German de-x-icu。否则,回退到默认值und-x-icu。
所以我尝试了以下 SQL 在 Postgres 10 Beta 2 中创建一个数据库。
CREATE DATABASE timepiece_
TEMPLATE 'template0'
ALLOW_CONNECTIONS TRUE
CONNECTION LIMIT -1
ENCODING 'UTF8'
LC_COLLATE 'und-x-icu'
LC_CTYPE 'und-x-icu'
;
Run Code Online (Sandbox Code Playgroud)
失败并出现错误:
[42809] …
postgresql collation postgresql-10 international-components-unicode
Postgres 中是否有任何方法可以将函数应用于数组(或任何类型的集合)的结果?
例如,如果我有一个create function add1...将数字加一的函数,有什么办法可以做到:
select map add1 array[1,5,8...];
Run Code Online (Sandbox Code Playgroud)
回来
array [2,6,9...]
Run Code Online (Sandbox Code Playgroud)
?
我不确定它是否对 a 有任何意义,select因为它可以直接将函数映射到单个结果上:
select add1(x) from X;
Run Code Online (Sandbox Code Playgroud)
另外,这里有懒惰的概念吗?所有功能都将“严格”应用?
我有一个看似简单的删除:
DELETE FROM table WHERE added_at < '2017-08-14'
Run Code Online (Sandbox Code Playgroud)
在具有 ~20k 行(w ~10k 受影响行)的表上,但它已经运行了 2000+ 秒。
SELECT * FROM table WHERE added_at < '2017-08-14'
Run Code Online (Sandbox Code Playgroud)
需要几毫秒。
我还有其他一些带有FOREIGN KEYs 的表,id并且我有一些以前的记录指向它,但是它们已经被删除了。
我试图:
VACUUM我的 PostgreSQL 服务器意外重启并显示以下消息:
2017-08-16 03:44:34 GMT LOG: received fast shutdown request
2017-08-16 03:44:34 GMT LOG: aborting any active transactions
2017-08-16 03:44:34 GMT FATAL: terminating connection due to administrator command
2017-08-16 03:44:34 GMT FATAL: terminating connection due to administrator command
2017-08-16 03:44:34 GMT LOG: autovacuum launcher shutting down
2017-08-16 03:44:34 GMT LOG: shutting down
2017-08-16 03:44:34 GMT LOG: database system is shut down
2017-08-16 03:46:04 GMT LOG: incomplete startup packet
2017-08-16 03:46:04 GMT LOG: database system was shut down at 2017-08-16 …Run Code Online (Sandbox Code Playgroud) 我正在使用 postgres 表验证规则并尝试CHECK为数组列设置约束。一个想法是只允许长度 > 0 的数组。
这是我想要实现它的方式:
create table words_table (
id serial primary key,
words varchar(20)[] CHECK (array_length(words, 1) > 0)
);
Run Code Online (Sandbox Code Playgroud)
但看起来它不起作用。o_o
insert into words_table (words) values ('{}');
//INSERT 0 1
Run Code Online (Sandbox Code Playgroud)
如何实现这样的约束?
word_similarity 函数的文档说:
返回一个数字,该数字指示第一个字符串与第二个字符串中最相似的单词的相似程度。该函数在第二个字符串中搜索最相似的词,而不是最相似的子字符串。结果的范围是零(表示两个字符串完全不同)到一(表示第一个字符串与第二个字符串的一个单词相同)。
但是,如果“第一个字符串”包含多个单词,他们对结果应该是什么有点含糊。以下结果的解释是什么:
Run Code Online (Sandbox Code Playgroud)select word_similarity('foo bar','foo bar baz');| word_similarity | | :-------------- | | 1 |
Run Code Online (Sandbox Code Playgroud)select word_similarity('baz bar','foo bar baz');| word_similarity | | :-------------- | | 1 |
Run Code Online (Sandbox Code Playgroud)select word_similarity('baz foo','foo bar baz');| word_similarity | | :-------------- | | 0.8 |
dbfiddle在这里
我在 Debian Linux 上使用 Postgres 9.4。我用一个用户创建了一个数据库,cindex可以访问该数据库。然而,当我尝试在命令行登录时,我什至没有提示输入密码:
myuser@myuserserver:~ $ psql -Ucindex cindex
psql: FATAL: Peer authentication failed for user "cindex"
Run Code Online (Sandbox Code Playgroud)
我还需要做什么来启用用户?下面你可以看到我已经设置的权限:
postgres@myuserserver:~$ psql
psql (9.4.13)
Type "help" for help.
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA cindex TO cindex;
GRANT
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
cindex | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =T/postgres +
| | | | | postgres=CTc/postgres+
| | …Run Code Online (Sandbox Code Playgroud) 我正在将 csv 文件导入 PostgreSQL 数据库。大多数文件导入没有任何问题,直到我收到此消息
ERROR: date/time field value out of range: "1421088300"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: COPY accidents, line 6356158, column datetime: "1421088300"
Run Code Online (Sandbox Code Playgroud)
但这似乎是 01/12/2015 @ 6:45pm (UTC) 根据https://www.unixtimestamp.com/index.php的有效时间戳
那么为什么会超出范围呢?
postgresql ×10
aggregate ×1
array ×1
backup ×1
collation ×1
constraint ×1
datetime ×1
delete ×1
international-components-unicode ×1
null ×1
password ×1
permissions ×1
pg-hba.conf ×1
psql ×1
timestamp ×1