Điểm:0

Nhận dạng phiên bản kết xuất PostgresSQL Tập lệnh Bash

lá cờ de

Tôi thường tạo lại các cơ sở dữ liệu khách hàng khác nhau trên docker cục bộ để kiểm tra các chức năng ERP mới trong môi trường phát triển Vì vậy, tệp kết xuất PostgreSQL thường bắt đầu bằng:

--
-- Kết xuất cơ sở dữ liệu PostgreSQL
--

-- Kết xuất từ ​​cơ sở dữ liệu phiên bản 13.3 (Ubuntu 13.3-1.pgdg20.04+1)
-- Bị kết xuất bởi pg_dump phiên bản 13.3 (Debian 13.3-1.pgdg100+1)
...

Đó là lý do tại sao tập lệnh bash của tôi 'restorefromdump.sh' (xây dựng docker tạm thời của phiên bản phù hợp của máy chủ postgresql để xử lý tệp kết xuất) bắt đầu với:

#!/bin/bash
DBDUMP=$1
DUMPFROM=$(grep "^-- Dumped.*from " "$DBDUMP")
DUMPVERSION_inclSpaces=$(grep -o '^-- Dumped from.*(' "$DBDUMP" | grep -o -E '[0-9*.]+[^version]')
DUMPVERSION="$(echo -e "${DUMPVERSION_inclSpaces}" | tr -d '[:space:]')"
REMOTEPGVER=postgres:$DUMPVERSION
# gọi hàm 'buildtmpdocker' để tạo docker postgres tạm thời 
buildtmpdocker $REMOTEPGVER 
...

Sau lệnh trực tiếp './restorefromdump.sh *.dmp' Có vẻ như đang hoạt động hiệu quả - nó nhận dạng chính xác phiên bản kết xuất, nhưng có lẽ có những cách tốt hơn? Bạn có quen nhận dạng phiên bản bên trong tệp kết xuất bằng tập lệnh Bash không?

muru avatar
lá cờ us
Theo bạn, regex `[0-9*.]+[^version]` phải làm là gì?
Andrzej Więcławski avatar
lá cờ de
nó tìm thấy các số trước chuỗi 'phiên bản' - ví dụ: | tệp kiểm tra $ nano | nội dung: 'asw123version' | sau khi lưu 'testfile' | tệp kiểm tra $ grep -o -E '[0-9*.]+[^version]' | kết quả: '123'
Andrzej Więcławski avatar
lá cờ de
nó chỉ tìm thấy số :)
muru avatar
lá cờ us
Tôi không biết làm thế nào bạn nghĩ ra điều đó, nhưng không, đó không phải là những gì regex đó làm. Nó tìm kiếm một hoặc nhiều trường hợp của các chữ số, `*` hoặc `.` theo sau bởi bất kỳ thứ gì khác ngoài các chữ cái `e`, `i`, `n`, `o`, `r`, `s`, `v `.
Andrzej Więcławski avatar
lá cờ de
Vì vậy, kết luận là... Ý kiến ​​​​của bạn là gì? Có phải cách của tôi là sai khi lấy mục tiêu: số lượng phiên bản PostgreSQL bao gồm các điểm không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.