版本 11 中基于声明性范围的分区的改进似乎真的适用于我的用例,但我不完全确定外键如何与分区一起工作。
我有一个表Files -< Segments -< Entries,其中每个文件有数百个段,每个段有数百个条目,因此条目大约是文件大小的 10,000 倍。文件有一个 CreationDate 字段,客户将定义一个保留期,以便他们删除旧条目。所有这些都清楚地指向基于日期的分区,因此首先查询最新条目会更快,并且可以轻松删除旧条目。
我遇到的第一个问题是,当我尝试创建 Files 表时,听起来我必须将 createdDate 作为主键的一部分包含在 RANGE 分区中:
CREATE TABLE Files2
(
FileId BIGSERIAL PRIMARY KEY,
createdDate timestamp with time zone,
filepath character varying COLLATE pg_catalog."default" NOT NULL
) PARTITION BY RANGE (createdDate)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ERROR: insufficient columns in PRIMARY KEY constraint definition
DETAIL: PRIMARY KEY constraint on table "files2" lacks column "createddate" which is part of the partition key.
Run Code Online (Sandbox Code Playgroud)
如果我从 …
嗨,我正在使用 Postgres 11 和 pgadmin 4.1。我有一个 SQL 文件,我试图将其导入到 pgadmin 4 中新创建的数据库中。
我知道这是一个普遍的错误,但我尽力解决它,但对我不起作用。
这是错误:

下面是一些 SQL 文件行。

正在使用的库:
我尝试过升级 psycopg2。
如果我花时间睡觉并尝试的话,这种情况就不会发生。(但是,我猜这是错误的方法。)
db_config = {
'dbname': "test",
'user': "*******",
'password': "*******",
'host': "*******",
'port': 5432,
'cursor_factory': RealDictCursor
}
pool = ThreadedConnectionPool(
minconn=1, maxconn=8, **db_config
)
def get(self, query, args=None):
conn = self._get_connection()
curr = conn.cursor()
try:
curr.execute(query, vars=(args or ()))
result = curr.fetchone()
except psycopg2.ProgrammingError as error:
print(error.pgcode)
raise error
finally:
self._put_connection(conn)
return result
Run Code Online (Sandbox Code Playgroud)
当我查询表时抛出以下错误。
[2019-08-08 10:03:47] 信息 test_run.py 行:51 2019-08-08 10:03:47.040447。
[2019-08-08 10:03:47] INFO request.py 行:43 查询表。
[2019-08-08 10:03:47] 信息 test_run.py 行:51 2019-08-08 10:03:47.074309 …
我正在 Postgresql 中处理一些间隔,但我不确定我是否理解间隔是如何工作的。
我想要做的是将间隔转换为秒。所以我有以下价值观:
select extract ('epoch' from '1 year'::INTERVAL);
Run Code Online (Sandbox Code Playgroud)
产生数字 31557600。如果我们将这个数字除以 (60*60*24),即一天中的秒数,我们得到 365。
所以 postgresql 间隔中的一年有 365 天。
select extract ('epoch' from '1 month'::INTERVAL);
Run Code Online (Sandbox Code Playgroud)
产生数字 2592000。如果我们将这个数字除以 (60*60*24),我们得到 30。
所以 postgresql 间隔中的一个月有 30 天。
因此,根据该逻辑,我试图计算以下间隔中的秒数:
select extract ('epoch' from '2 year 2 month 1 day 10 hour 5 minute'::INTERVAL);
Run Code Online (Sandbox Code Playgroud)
我使用以下公式来计算上述查询的结果:
SELECT (years * 365 * 24 * 3600) + (months * 30 * 24 * 3600) + (days * 24 * 3600) + (hours * 3600) + (minutes * …Run Code Online (Sandbox Code Playgroud) 我们在系统上设置了数据库 postgresql 11。大约有8张桌子。这几天我们就面临这个问题
ERROR: invalid page in block 9698 of relation base/16385/16560 SQL state: XX001
Run Code Online (Sandbox Code Playgroud)
根据我的研究,我们应该着手set zero_damaged_pages=on;解决这个问题。我们设置并执行了一些运行良好的选择查询。然后我们决定通过 pg_dump 备份该数据库。此作业未成功完成,但复制了所有记录。
现在,在新系统上,我们导入了备份,我们发现由于发生了数据重复,数据库模式未正确复制到此处。我们用另一个没问题的数据库重复了这个操作。一切正常,包括恢复。
最后,我得出的结论是,由于页面块中的错误,数据库没有正确备份。是否有任何类似set zero_damaged_pages=on;pg_dump 中的选项来忽略错误页面但完成后面或任何其他解决方案。
有没有办法测量PostgreSQL 中的逻辑复制延迟?
我有一个简单的方法t = Date.now;,它转到通过 REST APIt_time声明的Postresql列timestamp with time zone。我收到错误:date/time field value out of range。
我不能使用这篇文章中的答案,因为我不编写原始 SQL 而是使用 ORM(Knex.Js)。调用 db 只是为了使转换对我来说看起来有点矫枉过正。js中的任何其他解决方案?
我怎么找不到转换器?我错过了什么吗?
注意:我只需要日期和时间为 hh:mm:ss,我不需要毫秒。
从航站楼,我
sudo su postgres
psql
\l:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
nwnx | nwnx | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | …Run Code Online (Sandbox Code Playgroud) 我正在处理 ISO 8601 中的一些日期,当转换为时间戳时,我在毫秒内遇到了一些奇怪的情况:
SELECT '2020-05-15T19:01:59.002+00:00'::timestamp
2020-05-15 19:01:59:02 <--- wrong milliseconds
SELECT '2020-05-15T19:01:59.022+00:00'::timestamp
2020-05-15 19:01:59:22 <--- wrong milliseconds
SELECT '2020-05-15T19:01:59.22+00:00'::timestamp
2020-05-15 19:01:59:220 <--- ok, but I'm scared
Run Code Online (Sandbox Code Playgroud)
我尝试使用to_timestamp()但找不到解决字符串中 T 的方法。任何指导表示赞赏!
我试图通过设置此标志来启用 PostgreSQL 中的事务日志,其中查询运行时间超过 3 秒
log_min_duration_statement = 3000
Run Code Online (Sandbox Code Playgroud)
如何在不重新启动Postgres的情况下重新加载配置文件?
我已尝试以下选项并收到这些错误
1) postgres=# select pg_reload_config();
**ERROR: function pg_reload_config() does not exist**
LINE 1: select pg_reload_config();
2) postgres@ospostgresql:/$ /usr/lib/postgresql/11/bin/pg_ctl reload
pg_ctl: no database directory specified and environment variable PGDATA unset
Try "pg_ctl --help" for more information.
Run Code Online (Sandbox Code Playgroud) postgresql-11 ×10
postgresql ×7
pg-dump ×2
corruption ×1
dbeaver ×1
javascript ×1
pgadmin-4 ×1
python-3.x ×1
sql ×1