我之前成功使用https://linuxize.com/post/how-to-install-gcc-compiler-on-ubuntu-18-04/中的说明升级 gcc 版本,但它们不适用于 gcc-14 。如何在 Ubuntu 22.04 和 24.04 上安装 gcc-14 和 g++-14?
主页
我的开发环境最多需要Ubuntu 22.04.2 LTS,Ubuntu 22.04.4 LTS可以在官网找到。我不想从匿名来源安装。所以我安装了22.04.4 LTS,但我找不到有关版本号最后部分的任何信息。当我尝试设置环境时,我收到一条警告“此操作系统不受支持”。在进一步讨论之前,我想解决这个问题。您有什么建议吗?我做了一些研究,发现我无法降级主要版本。我唯一可以备份并重新安装 Ubuntu。但没有有关版本号最后部分的信息。是否可以降级次要部分以及如何降级?如果我找不到解决方案并决定重新安装 Ubuntu?如何找到所需的版本(22.04.2 LTS)?官网直接到下载页面,没有这个版本。
我执行这些脚本以通过 DevOps 管道构建 Ubuntu 22.04 映像。
sudo apt update --fix-missing
echo deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main >> /etc/apt/sources.list
echo deb http://azure.archive.ubuntu.com/ubuntu jammy main universe multiverse restricted >> /etc/apt/sources.list
echo deb http://azure.archive.ubuntu.com/ubuntu jammy-updates main multiverse universe restricted >> /etc/apt/sources.list
sudo apt-get update
sudo apt clean && sudo apt autoclean
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4f4ea0aae5267a6c
sudo apt-get install libntlm0
但是当管道运行时,我收到此错误并且失败。
Get:5 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease [23.9 kB]
azure-arm.ubuntu2204lts: Err:5 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease
azure-arm.ubuntu2204lts: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4F4EA0AAE5267A6C
W: GPG error: https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4F4EA0AAE5267A6C
==> azure-arm.ubuntu2204lts: E: The repository 'https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease' is not signed.
Err:1 http://azure.archive.ubuntu.com/ubuntu jammy/universe amd64 libntlm0 amd64 1.6-4
azure-arm.ubuntu2204lts: 404 Not Found [IP: 20.53.66.23 80]
==> azure-arm.ubuntu2204lts: E: Failed to fetch http://azure.archive.ubuntu.com/ubuntu/pool/universe/libn/libntlm/libntlm0_1.6-4_amd64.deb 404 Not Found [IP: 20.53.66.23 80]
==> azure-arm.ubuntu2204lts: E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ubuntu 临时版本在哪里?我只在 Ubuntu 桌面官方网站上看到下载了新的 LTS Ubuntu。他们刚刚停止发布临时版本吗?
我尝试安装这些好几次,但每次都出现同样的错误。在安装过程中,我选择了手动分区,创建了一个 ext4 分区,选中加密框,输入密码,选择/
作为安装点,然后继续安装。但是重新启动后,当它要求加密密码并输入密码时,它立即显示如下错误:
error: Invalid passphrase.
error: disk 'cryptouuid/abc123...' not found.
Entering rescue mode...
grub rescue>
我已经使用 Lubuntu 22.04 的加密安装作为我的主操作系统,当我有时输错密码时,需要几秒钟的时间才会显示错误。但这次在 24.04 中,错误几乎是即时的,没有任何延迟,这让我假设它甚至没有尝试解密。
是的,我确定密码是正确的。我还确保在必要时创建额外的分区(例如,当我尝试使用 BIOS 时,创建 8 MB 未格式化的分区,或者当使用 UEFI 时创建 300 MB fat32 分区,等等)。我什至尝试过没有额外分区的旧式 MBR。我什至尝试选择 btrfs 而不是 ext4。每次都出现同样的错误。
我在 VirtualBox 中尝试了 Kubuntu 24.04 和 Lubuntu 24.04,它们都有同样的问题。我什至在我的实际 PC 上的备用 SSD 中尝试了 Kubuntu 24.04,也是同样的情况。
我之前在 Lubuntu 22.04 中使用过这些确切的步骤,效果很好。这是新 24.04 LTS 中的已知错误吗?
更新:如果有用,这里有一些 VirtualBox 中 Lubuntu 22.04.4 和 Lubuntu 24.04 安装之间的屏幕截图比较。
Lubuntu 22.04(有效):
Lubuntu 24.04(不起作用):
更新 2:我尝试选择擦除整个驱动器选项并从那里加密,这似乎有效。我在 VirtualBox 中尝试了 Kubuntu 24.04 和 Lubuntu 24.04,它们似乎都按预期工作。加密整个驱动器当然缺乏手动分区的灵活性。
我想像原始源一样导出每一帧,在 webm 视频中是 alpha/透明视频轨道,如果我尝试使用基本命令导出,将以黑色背景导出。
ffmpeg \
-hide_banner \
-loglevel error\
-stats \
-i ${DIRECTORY_CONVERT_VIDEO_TO_FRAMES}${videofile} \
-vf "scale=${new_width}:${new_height}" \
"${DIRECTORY_CONVERTED_FRAMES}"%04d.png
我添加了-c:v png
,-q:v 0
但format=rgba
效果还是一样。
ffmpeg \
-hide_banner \
-loglevel error \
-stats \
-i video/ok.webm \
-vf "scale=${new_width}:${new_height},format=rgba" \
-c:v png \
-q:v 0 \
"${DIRECTORY_CONVERTED_FRAMES}"%04d.png
请帮我。我忘了,视频元数据:
ffprobe -show\_streams video/ok.webm
ffprobe version n6.1.1 Copyright (c) 2007-2023 the FFmpeg developers
built with gcc 13.2.1 (GCC) 20230801
configuration: --prefix=/usr --disable-debug --disable-static --disable-strippi
ng --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-frei0r --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame --enable-libopencore\_amrnb --enable-libopencore\_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librav1e --enable-librsvg --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
Input #0, matroska,webm, from 'video/ok.webm':
Metadata:
ENCODER : Lavf60.16.100
Duration: 00:00:05.00, start: 0.000000, bitrate: 2580 kb/s
Stream #0:0: Video: vp9 (Profile 0), yuv420p(tv, progressive), 600x1040, SAR 1:
1 DAR 15:26, 30 fps, 30 tbr, 1k tbn Metadata:
alpha\_mode : 1
ENCODER : Lavc60.31.102 libvpx-vp9
DURATION : 00:00:05.000000000
\[STREAM\]
index=0
codec\_name=vp9
codec\_long\_name=Google VP9
profile=Profile 0
codec\_type=video
codec\_tag\_string=\[0\]\[0\]\[0\]\[0\]
codec\_tag=0x0000
width=600
height=1040
coded\_width=600
coded\_height=1040
closed\_captions=0
film\_grain=0
has\_b\_frames=0
sample\_aspect\_ratio=1:1
display\_aspect\_ratio=15:26
pix\_fmt=yuv420p
level=-99
color\_range=tv
color\_space=unknown
color\_transfer=unknown
color\_primaries=unknown
chroma\_location=unspecified
field\_order=progressive
refs=1
id=N/A
r\_frame\_rate=30/1
avg\_frame\_rate=30/1
time\_base=1/1000
start\_pts=0
start\_time=0.000000
duration\_ts=N/A
duration=N/A
bit\_rate=N/A
max\_bit\_rate=N/A
bits\_per\_raw\_sample=N/A
nb\_frames=N/A
nb\_read\_frames=N/A
nb\_read\_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing\_impaired=0
DISPOSITION:visual\_impaired=0
DISPOSITION:clean\_effects=0
DISPOSITION:attached\_pic=0
DISPOSITION:timed\_thumbnails=0
DISPOSITION:non\_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still\_image=0
TAG:alpha\_mode=1
TAG:ENCODER=Lavc60.31.102 libvpx-vp9
TAG:DURATION=00:00:05.000000000
\[/STREAM\]
“正常”的 TCP 握手如下所示:
MachineA → SYN → MachineB
Machine B → SYN,ACK → MachineA
MachineA → ACK → MachineB
这意味着对于每个步骤,预计将在数据包中设置一个标志(或一组标志)。
当预期标志存在时,额外标志是否会被丢弃,或者带有额外标志的数据包是否被视为不正确?换句话说,以下序列是否会被视为MachineB
完整、正确的握手?
MachineA → SYN → MachineB
Machine B → SYN,ACK → MachineA
MachineA → ACK,RST,FIN → MachineB
ACK
出现在最后一个数据包中(因此握手可以被视为已完成),但还有一个RST
andFIN
标志(这只是无关标志的示例)。
我的问题是一般性的 - 初始握手只是一个例子,我对丢弃或不超过其他序列的额外标志的一般情况感兴趣。
在 CMD 中,当我输入 时PATH
,输出:
Path=C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\Windows\system32;C:\Windows;
我需要用新行分割每个路径,然后输出变为:
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\
C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\
C:\Windows\system32
C:\Windows
我可以在 PowerShell 中执行此操作$Env:Path.Split(';')
或从 CMD 调用它powershell -c "$Env:Path.Split(';')"
。
我如何在 CMD 中自行执行此操作?
我试过:
For /F "Tokens=1* Delims=;" %A in ('%PATH%') do @Echo %A %B
For /F "Tokens=1* Delims=;" %A in (%PATH%) do @Echo %A %B
给出错误:\Intel\Intel(R) was unexpected at this time.
感谢T3RR0R。工作了。
@For %G in ("%PATH:;=" "%")Do @Echo(%~G
上下文:新安装的 Debian 12,我收到一堆与 ssh 相关的奇怪日志:
root@square:~# journalctl -u ssh -f
May 07 11:13:00 yop-square sshd[766]: error: kex_exchange_identification: Connection closed by remote host
May 07 11:13:00 yop-square sshd[766]: Connection closed by 10.91.66.91 port 53714
May 07 11:13:00 yop-square sshd[767]: error: kex_exchange_identification: Connection closed by remote host
May 07 11:13:00 yop-square sshd[767]: Connection closed by 10.106.14.62 port 54236
May 07 11:13:00 yop-square sshd[768]: error: kex_exchange_identification: Connection closed by remote host
May 07 11:13:00 yop-square sshd[768]: Connection closed by 10.35.165.19 port 60748
May 07 11:13:06 yop-square sshd[771]: error: kex_exchange_identification: Connection closed by remote host
May 07 11:13:06 yop-square sshd[771]: Connection closed by 10.35.165.49 port 42286
May 07 11:13:06 yop-square sshd[772]: error: kex_exchange_identification: Connection closed by remote host
May 07 11:13:06 yop-square sshd[772]: Connection closed by 10.80.98.247 port 47780
这可能是进行扫描的设备(公司网络的一部分),但行为/日志很奇怪。我拿了一个tcpdump
,下面是导致上面日志的交流之一
No. Time Source Destination Protocol Length Info
1380 122.725892 10.81.98.206 10.237.76.90 TCP 74 60422 → 22 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM TSval=4018386585 TSecr=0 WS=128
1381 122.725908 10.237.76.90 10.81.98.206 TCP 74 22 → 60422 [SYN, ACK] Seq=0 Ack=1 Win=65160 Len=0 MSS=1460 SACK_PERM TSval=660439285 TSecr=4018386585 WS=128
1382 122.726397 10.81.98.206 10.237.76.90 TCP 66 60422 → 22 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=4018386586 TSecr=660439285
1383 122.726505 10.81.98.206 10.237.76.90 TCP 66 60422 → 22 [FIN, ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=4018386586 TSecr=660439285
1384 122.730066 10.237.76.90 10.81.98.206 TCP 66 22 → 60422 [ACK] Seq=1 Ack=2 Win=65280 Len=0 TSval=660439290 TSecr=4018386586
1385 122.738228 10.237.76.90 10.81.98.206 SSH 106 Server: Protocol (SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2)
1386 122.738603 10.237.76.90 10.81.98.206 TCP 66 22 → 60422 [FIN, ACK] Seq=41 Ack=2 Win=65280 Len=0 TSval=660439298 TSecr=4018386586
1387 122.738792 10.81.98.206 10.237.76.90 TCP 60 60422 → 22 [RST] Seq=2 Win=0 Len=0
1388 122.739140 10.81.98.206 10.237.76.90 TCP 60 60422 → 22 [RST] Seq=2 Win=0 Len=0
在这种情况下,10.237.76.90
是me
(我的 Debian 盒子)并且10.81.98.206
是them
. 请注意,所有活动均已授权等等 - 我的问题的重点是了解交换并找出行为不当的人(或者,一切都很好,交换/日志是它们应该的样子)
1380
1382
→发起they
SSH 调用并完成握手1383
→they
发送FIN,ACK
,为什么?。如果他们想结束对话,他们应该发送 aFIN
并等待 aFIN,ACK
,对吧?1384
→ 我发送了一封ACK
,不知道为什么。
无论如何,事情似乎从那里开始向南发展
1385
→ 我的 ssh 显示了它的协议,不知道为什么,因为连接终止了1386
→突然me
发送一个FIN,ACK
1387
→1388
发送they
两个RST
,可能是为了让我迷路
我仍然不确定是谁在连接中造成了混乱,但我确实想知道,因为这要么是我的问题sshd
(我严重怀疑),要么是公司扫描的问题,所以我会发送一个咆哮。
我一直在阅读 SMTP 规范和其他相关的 RFC(主要是8314和6409),但无法理解它,所以我希望你们能帮助我。
我正在尝试设置一个 SMTP 服务器来测试事务消息的传递,并且它在提交时按预期工作,也就是说,如果我们将邮件发件人指向它,它将成功请求身份验证、获取消息并存储它。所有这些都通过使用 TLS 的端口 587 进行。
现在我想添加一个包罗万象的机制,以便所有发送到 *@mydomain.com 的电子邮件都存储在同一个数据库中,所以我开始做一些研究。我发现,一旦您通过 SMTP 发送电子邮件,MTA 也会使用 SMTP 传送电子邮件,这在规范中称为“消息中继”。
据我了解,您需要侦听两个端口,587 用于“消息提交”(带身份验证,检查发件人是否在您的服务器上)和端口 25 用于“消息中继”(不带身份验证,检查收件人是否在您的服务器上)你的服务器)。由于底层服务器框架的限制,将不支持 STARTTLS,仅支持隐式 TLS,因此没有端口 465。
所以,问题是“我的理解是否正确,应该有两个具有不同目的的监听端口?”
还有一个额外的好处:当端口可互换时,服务器如何协商身份验证(例如在 CPanel 上,您可以使用 465 或 25 进行提交,唯一的区别是每个端口上的 TLS 支持;而且它们还通过端口 25 接收传入邮件)?
需要注意的是,服务器的目的不是发送任何消息,而只是从 Web 应用程序(例如测试其密码重置邮件是否有效)或从其他邮件服务器/MTA(如 Mailinator 所做的那样,带有通配符 MX 记录,用于测试传入消息/回复)。
提前致谢!
好吧,我认为内核/proc/sys/kernel/random/boot_id
在启动期间发生变化,然后在运行时保持该值是合乎逻辑的。如果 的预期用途boot_id
是找出机器何时重新启动,那么至少这对我来说是有意义的。
当使用监视文件时monit
,我注意到即使机器没有重新启动,文件似乎也发生了变化;这意味着文件的时间戳发生变化,而不是内容发生变化。
所以我想知道是谁更改了文件的时间戳。
作为参考,这是我正在使用的监视配置:
check file bootid with path /proc/sys/kernel/random/boot_id
#if changed timestamp then alert
if content !=
"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
then alert
if changed checksum then alert
group local
在检查监控结果时,我得到:
File 'bootid'
status OK
monitoring status Monitored
monitoring mode active
on reboot start
permission 444
uid 0
gid 0
size 0 B
access timestamp Tue, 07 May 2024 11:01:31
change timestamp Tue, 07 May 2024 11:01:31
modify timestamp Tue, 07 May 2024 11:01:31
content match no
checksum d174a6b860689b62417af5eccd2b17ee (MD5)
data collected Tue, 07 May 2024 11:46:11
交叉检查我得到:
# stat /proc/sys/kernel/random/boot_id
File: '/proc/sys/kernel/random/boot_id'
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
Device: 4h/4d Inode: 9770501 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-05-07 11:01:31.721335498 +0200
Modify: 2024-05-07 11:01:31.721335498 +0200
Change: 2024-05-07 11:01:31.721335498 +0200
Birth: -
# uptime
11:49am up 14 days 0:49, 4 users, load average: 0.00, 0.00, 0.00
系统在 x86_64 上运行 SLES12 SP5,唯一的“嫌疑人”是 cron-jobs 和“snapper”:
May 07 11:00:01 v04 systemd[1]: Started Session 7426 of user root.
May 07 11:00:01 v04 systemd[1]: Started Session 7428 of user root.
May 07 11:00:01 v04 systemd[1]: Started Session 7427 of user root.
May 07 11:00:01 v04 CRON[5541]: (root) CMD ([ -x /usr/lib64/sa/sa1 ] && exe
May 07 11:00:01 v04 run-crons[5606]: suse.de-snapper: OK
我有一个字符串列表:
python2-distutils-extra|==>|python2-distutils-extra|2.39-5|Enhancements to the Python build system
python2-fuse|==>|python2-fuse|1.0.5-1|This is a Python 2 interface to libfuse (https://github.com/libfuse/libfuse), a simple interface for userspace programs to export a virtual filesystem to the Linux kernel
python2-gobject2|==>|python2-gobject2|2.28.7-7|Legacy Python 2 bindings for GObject
python2-numpy|==>|python2-numpy|1.16.6-3|Scientific tools for Python 2
我想得到:
python2-distutils-extra ==> python2-distutils-extra 2.39-5
Enhancements to the Python build system
python2-fuse ==> python2-fuse 1.0.5-1
This is a Python 2 interface to libfuse (https://github.com/libfuse/libfuse), a simple interface for userspace programs to export a virtual filesystem to the Linux kernel
python2-gobject2 ==> python2-gobject2 2.28.7-7
Legacy Python 2 bindings for GObject
python2-numpy ==> python2-numpy 1.16.6-3
Scientific tools for Python 2
编辑:与第一列的长度对齐意味着“==>”始终位于同一位置(就像上面的代码一样)。
我已经尝试使用列来获取它,但我使用列的哪些选项并不重要,结果是:
python2-distutils-extra ==> python2-distutils-extra 2.39-5
Enhancements to the Python build system
python2-fuse ==> python2-fuse 1.0.5-1
This is a Python 2 interface to libfuse (https://github.com/libfuse/libfuse), a simple interface for userspace programs to export a virtual filesystem to the Linux kernel
python2-gobject2 ==> python2-gobject2 2.28.7-7
Legacy Python 2 bindings for GObject
python2-numpy ==> python2-numpy 1.16.6-3
Scientific tools for Python 2
请帮忙...
我用的是jq 1.7
数据
我正在对 yt-dlp 下载的 info.json 进行操作
yt-dlp --write-info-json --skip-download https://www.youtube.com/watch?v=vlIO-7Rpi7c
JQ-任务
- 现在我想删除字幕中名称不是的所有数组
de
,en-US
并在其中de
选择en-US
所有带有 element 的对象ext == vtt
。
这成功地工作如下:
jq 'pick(.subtitles | .de[],."en-US"[] | select (.ext == "vtt")) | del(..|nulls)' *.json
输出
{
"subtitles": {
"de": [
{
"ext": "vtt",
"url": "https://www.youtube.com/api/timedtext?v=vlIO-7Rpi7c&ei=JS05ZoT2Ftf0i9oP8dy4mAo&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1715048341&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=AB2ECEEABF48D1A16ADC7ACCB8A072D63EE12DCC.5F56904251766FB68624A68FF2BBB57B9CCFFD2F&key=yt8&lang=de&fmt=vtt",
"name": "German"
}
],
"en-US": [
{
"ext": "vtt",
"url": "https://www.youtube.com/api/timedtext?v=vlIO-7Rpi7c&ei=JS05ZoT2Ftf0i9oP8dy4mAo&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1715048341&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=AB2ECEEABF48D1A16ADC7ACCB8A072D63EE12DCC.5F56904251766FB68624A68FF2BBB57B9CCFFD2F&key=yt8&lang=en-US&fmt=vtt",
"name": "English (United States)"
}
]
}
}
问题
对于某些Youtube视频,json文件不包含“en-US”而是包含“en”,而有些则包含de、en、en-US这三个。所以我写了以下内容
jq 'pick(.subtitles | .de[],.en[],."en-US"[] | select (.ext == "vtt")) | del(..|nulls)' *.json
错误
jq: 错误 (at:69): 无法迭代 null (null)
需要帮助
如果 json 文件中并非所有这些语言都存在,如何仅选择 .ext == "vtt" 仅适用于 en、en-US、de 语言?
我想获取 PostgreSQL 数据库的列表。PostgreSQL 由postgres
用户运行,所以我需要使用runuser
.
当我执行时
runuser -l postgres -c 'psql -tc "SELECT datname FROM pg_database WHERE datname <> ALL ('{template0,template1,postgres}');"'
我明白了
ERROR: column "template0" does not exist
LINE 1: ...CT datname FROM pg_database WHERE datname <> ALL (template0)...
因此,如果我在登录时执行 runuser 命令,postgres
它就su
可以工作。
在另一个表发生更改后,如何自动更新一个表?
说(请见下文)我有一张桌子countries
,还有一张桌子cities
。如何使在表中添加城市时cities
,total
表中的列自动更新(对应城市的增量)countries
?
有点儿 :
BEGIN; INSERT INTO cities VALUES ('Tokyo', 'Japan'); UPDATE countries SET total=1 WHERE name='Japan'; COMMIT;
,但是自动的,添加时执行 acountries.the_city.total++
cities.the_city
。
国家:
postgres=# SELECT * FROM countries;
name | total
-------+-------
USA | 0
Japan | 0
(2 rows)
城市:
postgres=# SELECT * FROM cities;
name | country
------+---------
(0 rows)
命令:
CREATE DATABASE geo;
\c geo;
CREATE TABLE countries (
name VARCHAR(15) PRIMARY KEY,
total int
);
CREATE TABLE cities (
name VARCHAR(15),
country VARCHAR(15),
FOREIGN KEY (country) REFERENCES countries(name)
);
语境:
标准 SQL 或 Postgres v16
我尝试使用 Kubernetes 部署 MySQL,拥有三个访问相同存储(PVC)的副本。这是配置
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: NodePort
ports:
- protocol: TCP
port: 3307
targetPort: 3306
nodePort: 30091
selector:
app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 2
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:latest
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: pwd
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
当您应用此配置文件时kubectl apply -f file_name.yaml
,您可以创建三个 pod,它们访问数据库的同一存储。当您检查 pod 的状态时kubectl get pods
,您可以看到只有一个 pod 开始运行,其他 pod 处于运行CrashLoop
状态。发生的情况是,当创建多个实例使用公共存储时,只有一个实例可以获得文件的锁ibdata1
。这就是为什么只有一个 pod 变得健康,而其他 pod 则处于 CrashLoop 状态。(您可以使用 来查看这一点kubectl logs pod-name
)。我想要的是,
- 我可以释放文件的锁
ibdata
并使用所有 Pod 的存储吗?(这通常不能,因为一致性问题) - 如果没有,我该如何创建提议的想法?(使用多个 Pod 实例访问单个存储/卷)?
- 您是否会提出其他想法来实现使用多个 Pod 实例访问单个存储?
欢迎您的回答和帮助。
我正在尝试找到管理 postgresql 分区表的最佳方法。我有两个分区表(每天一个分区,基于created_at
两个表上都存在的列),fridge_tagreading
并且fridge_tagantennareading
. 通过复合外键fridge_tagantennareading
进行引用。fridge_tagreading
(tag_reading_id, created_at)
我经常想删除旧分区。为此,我的想法是执行以下操作(例如删除日期为 2024 年 5 月 3 日的数据):
alter table fridge_tagantennareading detach partition fridge_tagantennareading_2024_may_03;
drop table fridge_tagantennareading_2024_may_03;
alter table fridge_tagreading detach partition fridge_tagreading_2024_may_03;
drop table fridge_tagreading_2024_may_03;
前两个查询很有魅力。然而,当运行第三个时,我达到了我的statement_timeout
(当前设置为 10 秒)。看起来检查引用表上的 fk 违规的查询花费了太多时间:
select fk."tag_reading_id", fk."created_at"
from "public"."fridge_tagantennareading" fk
join
"public"."fridge_tagreading_2024_may_03" pk
on (
pk."id" operator(pg_catalog. =) fk."tag_reading_id"
and pk."created_at" operator(pg_catalog. =) fk."created_at"
)
where
(
(pk.created_at is not null)
and (pk.created_at >= '2024-05-03 00:00:00+00'::timestamp with time zone)
and (pk.created_at < '2024-05-04 00:00:00+00'::timestamp with time zone)
)
and (fk."tag_reading_id" is not null and fk."created_at" is not null)
;
我的理解是这个查询花费了太多时间,因为 postgres 检查引用表中的所有分区。我很惊讶 postgres 不会“传播约束”,这将导致仅对引用表的良好分区进行查询(这会非常快)。
这是一个已知的限制吗?遇到这样的情况你会如何处理?到目前为止,我唯一的解决方法似乎是放弃外键约束......
谢谢
我每天都有一个 cron 作业来转储我的数据库。crontab 的一部分包括以下内容:
01 01 * * * root /etc/cron.d/backupDaily.sh
部分备份脚本包含以下内容:
cd /data/pgsql/
sudo -u postgres /usr/pgsql-12/bin/pg_dumpall>/data/pgsql/pg.sql
我的旧笔记提到将凭据放入文件中,例如/.pgpass
. 然而,从一开始我已经升级了我的服务器几次,而且我似乎不再有这个文件了。
谁能告诉我如何摆脱这个困境?这是否表明我的postgres
用户没有密码?
这是我的文件中的内容pg_hba.conf
:
# TYPE DATABASE USER ADDRESS METHOD
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.0.0/24 trust
host all all 192.168.1.0/24 trust
host all all 192.168.77.0/24 trust
我需要生成用户定义的整数作为给定间隔所需的无序数字集,例如 (10) 一定次数,例如表的一列中的 3 个。
数字的个数和重复次数可以不同,并且可以由用户自行设定。
例如,所需的结果从上到下应如下所示:
0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2. 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2. 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2. 1, 0.
也许,使用该功能
SELECT n
FROM generate_series(ARRAY[0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2. 1, 0], 3) n
或者类似的东西?