diff options
Diffstat (limited to '')
-rw-r--r-- | src/bin/pg_waldump/.gitignore | 28 | ||||
-rw-r--r-- | src/bin/pg_waldump/Makefile | 52 | ||||
-rw-r--r-- | src/bin/pg_waldump/compat.c | 64 | ||||
-rw-r--r-- | src/bin/pg_waldump/nls.mk | 6 | ||||
-rw-r--r-- | src/bin/pg_waldump/pg_waldump.c | 1126 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/cs.po | 338 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/de.po | 307 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/el.po | 310 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/es.po | 311 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/fr.po | 362 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/ja.po | 308 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/ko.po | 313 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/ru.po | 363 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/sv.po | 305 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/tr.po | 306 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/uk.po | 293 | ||||
-rw-r--r-- | src/bin/pg_waldump/po/zh_CN.po | 307 | ||||
-rw-r--r-- | src/bin/pg_waldump/rmgrdesc.c | 40 | ||||
-rw-r--r-- | src/bin/pg_waldump/rmgrdesc.h | 23 | ||||
-rw-r--r-- | src/bin/pg_waldump/t/001_basic.pl | 11 |
20 files changed, 5173 insertions, 0 deletions
diff --git a/src/bin/pg_waldump/.gitignore b/src/bin/pg_waldump/.gitignore new file mode 100644 index 0000000..3be00a8 --- /dev/null +++ b/src/bin/pg_waldump/.gitignore @@ -0,0 +1,28 @@ +/pg_waldump + +# Source files copied from src/backend/access/rmgrdesc/ +/brindesc.c +/clogdesc.c +/committsdesc.c +/dbasedesc.c +/genericdesc.c +/gindesc.c +/gistdesc.c +/hashdesc.c +/heapdesc.c +/logicalmsgdesc.c +/mxactdesc.c +/nbtdesc.c +/relmapdesc.c +/replorigindesc.c +/seqdesc.c +/smgrdesc.c +/spgdesc.c +/standbydesc.c +/tblspcdesc.c +/xactdesc.c +/xlogdesc.c +/xlogreader.c + +# Generated by test suite +/tmp_check/ diff --git a/src/bin/pg_waldump/Makefile b/src/bin/pg_waldump/Makefile new file mode 100644 index 0000000..9f333d0 --- /dev/null +++ b/src/bin/pg_waldump/Makefile @@ -0,0 +1,52 @@ +# src/bin/pg_waldump/Makefile + +PGFILEDESC = "pg_waldump - decode and display WAL" +PGAPPICON=win32 + +subdir = src/bin/pg_waldump +top_builddir = ../../.. +include $(top_builddir)/src/Makefile.global + +OBJS = \ + $(RMGRDESCOBJS) \ + $(WIN32RES) \ + compat.o \ + pg_waldump.o \ + rmgrdesc.o \ + xlogreader.o + +override CPPFLAGS := -DFRONTEND $(CPPFLAGS) + +RMGRDESCSOURCES = $(sort $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))) +RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES)) + + +all: pg_waldump + +pg_waldump: $(OBJS) | submake-libpgport + $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) + +xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/% + rm -f $@ && $(LN_S) $< . + +$(RMGRDESCSOURCES): % : $(top_srcdir)/src/backend/access/rmgrdesc/% + rm -f $@ && $(LN_S) $< . + +install: all installdirs + $(INSTALL_PROGRAM) pg_waldump$(X) '$(DESTDIR)$(bindir)/pg_waldump$(X)' + +installdirs: + $(MKDIR_P) '$(DESTDIR)$(bindir)' + +uninstall: + rm -f '$(DESTDIR)$(bindir)/pg_waldump$(X)' + +clean distclean maintainer-clean: + rm -f pg_waldump$(X) $(OBJS) $(RMGRDESCSOURCES) xlogreader.c + rm -rf tmp_check + +check: + $(prove_check) + +installcheck: + $(prove_installcheck) diff --git a/src/bin/pg_waldump/compat.c b/src/bin/pg_waldump/compat.c new file mode 100644 index 0000000..08bd627 --- /dev/null +++ b/src/bin/pg_waldump/compat.c @@ -0,0 +1,64 @@ +/*------------------------------------------------------------------------- + * + * compat.c + * Reimplementations of various backend functions. + * + * Portions Copyright (c) 2013-2021, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/bin/pg_waldump/compat.c + * + * This file contains client-side implementations for various backend + * functions that the rm_desc functions in *desc.c files rely on. + * + *------------------------------------------------------------------------- + */ + +/* ugly hack, same as in e.g pg_controldata */ +#define FRONTEND 1 +#include "postgres.h" + +#include <time.h> + +#include "utils/datetime.h" + +/* copied from timestamp.c */ +pg_time_t +timestamptz_to_time_t(TimestampTz t) +{ + pg_time_t result; + + result = (pg_time_t) (t / USECS_PER_SEC + + ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY)); + return result; +} + +/* + * Stopgap implementation of timestamptz_to_str that doesn't depend on backend + * infrastructure. This will work for timestamps that are within the range + * of the platform time_t type. (pg_time_t is compatible except for possibly + * being wider.) + * + * XXX the return value points to a static buffer, so beware of using more + * than one result value concurrently. + * + * XXX: The backend timestamp infrastructure should instead be split out and + * moved into src/common. That's a large project though. + */ +const char * +timestamptz_to_str(TimestampTz dt) +{ + static char buf[MAXDATELEN + 1]; + char ts[MAXDATELEN + 1]; + char zone[MAXDATELEN + 1]; + time_t result = (time_t) timestamptz_to_time_t(dt); + struct tm *ltime = localtime(&result); + + strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime); + strftime(zone, sizeof(zone), "%Z", ltime); + + snprintf(buf, sizeof(buf), "%s.%06d %s", + ts, (int) (dt % USECS_PER_SEC), zone); + + return buf; +} diff --git a/src/bin/pg_waldump/nls.mk b/src/bin/pg_waldump/nls.mk new file mode 100644 index 0000000..9104a4a --- /dev/null +++ b/src/bin/pg_waldump/nls.mk @@ -0,0 +1,6 @@ +# src/bin/pg_waldump/nls.mk +CATALOG_NAME = pg_waldump +AVAIL_LANGUAGES = cs de el es fr ja ko ru sv tr uk zh_CN +GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_waldump.c +GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) fatal_error +GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) fatal_error:1:c-format diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c new file mode 100644 index 0000000..2daed32 --- /dev/null +++ b/src/bin/pg_waldump/pg_waldump.c @@ -0,0 +1,1126 @@ +/*------------------------------------------------------------------------- + * + * pg_waldump.c - decode and display WAL + * + * Copyright (c) 2013-2021, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/bin/pg_waldump/pg_waldump.c + *------------------------------------------------------------------------- + */ + +#define FRONTEND 1 +#include "postgres.h" + +#include <dirent.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "access/transam.h" +#include "access/xlog_internal.h" +#include "access/xlogreader.h" +#include "access/xlogrecord.h" +#include "common/fe_memutils.h" +#include "common/logging.h" +#include "getopt_long.h" +#include "rmgrdesc.h" + +static const char *progname; + +static int WalSegSz; + +typedef struct XLogDumpPrivate +{ + TimeLineID timeline; + XLogRecPtr startptr; + XLogRecPtr endptr; + bool endptr_reached; +} XLogDumpPrivate; + +typedef struct XLogDumpConfig +{ + /* display options */ + bool quiet; + bool bkp_details; + int stop_after_records; + int already_displayed_records; + bool follow; + bool stats; + bool stats_per_record; + + /* filter options */ + int filter_by_rmgr; + TransactionId filter_by_xid; + bool filter_by_xid_enabled; +} XLogDumpConfig; + +typedef struct Stats +{ + uint64 count; + uint64 rec_len; + uint64 fpi_len; +} Stats; + +#define MAX_XLINFO_TYPES 16 + +typedef struct XLogDumpStats +{ + uint64 count; + Stats rmgr_stats[RM_NEXT_ID]; + Stats record_stats[RM_NEXT_ID][MAX_XLINFO_TYPES]; +} XLogDumpStats; + +#define fatal_error(...) do { pg_log_fatal(__VA_ARGS__); exit(EXIT_FAILURE); } while(0) + +static void +print_rmgr_list(void) +{ + int i; + + for (i = 0; i <= RM_MAX_ID; i++) + { + printf("%s\n", RmgrDescTable[i].rm_name); + } +} + +/* + * Check whether directory exists and whether we can open it. Keep errno set so + * that the caller can report errors somewhat more accurately. + */ +static bool +verify_directory(const char *directory) +{ + DIR *dir = opendir(directory); + + if (dir == NULL) + return false; + closedir(dir); + return true; +} + +/* + * Split a pathname as dirname(1) and basename(1) would. + * + * XXX this probably doesn't do very well on Windows. We probably need to + * apply canonicalize_path(), at the very least. + */ +static void +split_path(const char *path, char **dir, char **fname) +{ + char *sep; + + /* split filepath into directory & filename */ + sep = strrchr(path, '/'); + + /* directory path */ + if (sep != NULL) + { + *dir = pnstrdup(path, sep - path); + *fname = pg_strdup(sep + 1); + } + /* local directory */ + else + { + *dir = NULL; + *fname = pg_strdup(path); + } +} + +/* + * Open the file in the valid target directory. + * + * return a read only fd + */ +static int +open_file_in_directory(const char *directory, const char *fname) +{ + int fd = -1; + char fpath[MAXPGPATH]; + + Assert(directory != NULL); + + snprintf(fpath, MAXPGPATH, "%s/%s", directory, fname); + fd = open(fpath, O_RDONLY | PG_BINARY, 0); + + if (fd < 0 && errno != ENOENT) + fatal_error("could not open file \"%s\": %m", fname); + return fd; +} + +/* + * Try to find fname in the given directory. Returns true if it is found, + * false otherwise. If fname is NULL, search the complete directory for any + * file with a valid WAL file name. If file is successfully opened, set the + * wal segment size. + */ +static bool +search_directory(const char *directory, const char *fname) +{ + int fd = -1; + DIR *xldir; + + /* open file if valid filename is provided */ + if (fname != NULL) + fd = open_file_in_directory(directory, fname); + + /* + * A valid file name is not passed, so search the complete directory. If + * we find any file whose name is a valid WAL file name then try to open + * it. If we cannot open it, bail out. + */ + else if ((xldir = opendir(directory)) != NULL) + { + struct dirent *xlde; + + while ((xlde = readdir(xldir)) != NULL) + { + if (IsXLogFileName(xlde->d_name)) + { + fd = open_file_in_directory(directory, xlde->d_name); + fname = pg_strdup(xlde->d_name); + break; + } + } + + closedir(xldir); + } + + /* set WalSegSz if file is successfully opened */ + if (fd >= 0) + { + PGAlignedXLogBlock buf; + int r; + + r = read(fd, buf.data, XLOG_BLCKSZ); + if (r == XLOG_BLCKSZ) + { + XLogLongPageHeader longhdr = (XLogLongPageHeader) buf.data; + + WalSegSz = longhdr->xlp_seg_size; + + if (!IsValidWalSegSize(WalSegSz)) + fatal_error(ngettext("WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte", + "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes", + WalSegSz), + fname, WalSegSz); + } + else if (r < 0) + fatal_error("could not read file \"%s\": %m", + fname); + else + fatal_error("could not read file \"%s\": read %d of %zu", + fname, r, (Size) XLOG_BLCKSZ); + close(fd); + return true; + } + + return false; +} + +/* + * Identify the target directory. + * + * Try to find the file in several places: + * if directory != NULL: + * directory / + * directory / XLOGDIR / + * else + * . + * XLOGDIR / + * $PGDATA / XLOGDIR / + * + * The valid target directory is returned. + */ +static char * +identify_target_directory(char *directory, char *fname) +{ + char fpath[MAXPGPATH]; + + if (directory != NULL) + { + if (search_directory(directory, fname)) + return pg_strdup(directory); + + /* directory / XLOGDIR */ + snprintf(fpath, MAXPGPATH, "%s/%s", directory, XLOGDIR); + if (search_directory(fpath, fname)) + return pg_strdup(fpath); + } + else + { + const char *datadir; + + /* current directory */ + if (search_directory(".", fname)) + return pg_strdup("."); + /* XLOGDIR */ + if (search_directory(XLOGDIR, fname)) + return pg_strdup(XLOGDIR); + + datadir = getenv("PGDATA"); + /* $PGDATA / XLOGDIR */ + if (datadir != NULL) + { + snprintf(fpath, MAXPGPATH, "%s/%s", datadir, XLOGDIR); + if (search_directory(fpath, fname)) + return pg_strdup(fpath); + } + } + + /* could not locate WAL file */ + if (fname) + fatal_error("could not locate WAL file \"%s\"", fname); + else + fatal_error("could not find any WAL file"); + + return NULL; /* not reached */ +} + +/* pg_waldump's XLogReaderRoutine->segment_open callback */ +static void +WALDumpOpenSegment(XLogReaderState *state, XLogSegNo nextSegNo, + TimeLineID *tli_p) +{ + TimeLineID tli = *tli_p; + char fname[MAXPGPATH]; + int tries; + + XLogFileName(fname, tli, nextSegNo, state->segcxt.ws_segsize); + + /* + * In follow mode there is a short period of time after the server has + * written the end of the previous file before the new file is available. + * So we loop for 5 seconds looking for the file to appear before giving + * up. + */ + for (tries = 0; tries < 10; tries++) + { + state->seg.ws_file = open_file_in_directory(state->segcxt.ws_dir, fname); + if (state->seg.ws_file >= 0) + return; + if (errno == ENOENT) + { + int save_errno = errno; + + /* File not there yet, try again */ + pg_usleep(500 * 1000); + + errno = save_errno; + continue; + } + /* Any other error, fall through and fail */ + break; + } + + fatal_error("could not find file \"%s\": %m", fname); +} + +/* + * pg_waldump's XLogReaderRoutine->segment_close callback. Same as + * wal_segment_close + */ +static void +WALDumpCloseSegment(XLogReaderState *state) +{ + close(state->seg.ws_file); + /* need to check errno? */ + state->seg.ws_file = -1; +} + +/* pg_waldump's XLogReaderRoutine->page_read callback */ +static int +WALDumpReadPage(XLogReaderState *state, XLogRecPtr targetPagePtr, int reqLen, + XLogRecPtr targetPtr, char *readBuff) +{ + XLogDumpPrivate *private = state->private_data; + int count = XLOG_BLCKSZ; + WALReadError errinfo; + + if (private->endptr != InvalidXLogRecPtr) + { + if (targetPagePtr + XLOG_BLCKSZ <= private->endptr) + count = XLOG_BLCKSZ; + else if (targetPagePtr + reqLen <= private->endptr) + count = private->endptr - targetPagePtr; + else + { + private->endptr_reached = true; + return -1; + } + } + + if (!WALRead(state, readBuff, targetPagePtr, count, private->timeline, + &errinfo)) + { + WALOpenSegment *seg = &errinfo.wre_seg; + char fname[MAXPGPATH]; + + XLogFileName(fname, seg->ws_tli, seg->ws_segno, + state->segcxt.ws_segsize); + + if (errinfo.wre_errno != 0) + { + errno = errinfo.wre_errno; + fatal_error("could not read from file %s, offset %u: %m", + fname, errinfo.wre_off); + } + else + fatal_error("could not read from file %s, offset %u: read %d of %zu", + fname, errinfo.wre_off, errinfo.wre_read, + (Size) errinfo.wre_req); + } + + return count; +} + +/* + * Calculate the size of a record, split into !FPI and FPI parts. + */ +static void +XLogDumpRecordLen(XLogReaderState *record, uint32 *rec_len, uint32 *fpi_len) +{ + int block_id; + + /* + * Calculate the amount of FPI data in the record. + * + * XXX: We peek into xlogreader's private decoded backup blocks for the + * bimg_len indicating the length of FPI data. It doesn't seem worth it to + * add an accessor macro for this. + */ + *fpi_len = 0; + for (block_id = 0; block_id <= record->max_block_id; block_id++) + { + if (XLogRecHasBlockImage(record, block_id)) + *fpi_len += record->blocks[block_id].bimg_len; + } + + /* + * Calculate the length of the record as the total length - the length of + * all the block images. + */ + *rec_len = XLogRecGetTotalLen(record) - *fpi_len; +} + +/* + * Store per-rmgr and per-record statistics for a given record. + */ +static void +XLogDumpCountRecord(XLogDumpConfig *config, XLogDumpStats *stats, + XLogReaderState *record) +{ + RmgrId rmid; + uint8 recid; + uint32 rec_len; + uint32 fpi_len; + + stats->count++; + + rmid = XLogRecGetRmid(record); + + XLogDumpRecordLen(record, &rec_len, &fpi_len); + + /* Update per-rmgr statistics */ + + stats->rmgr_stats[rmid].count++; + stats->rmgr_stats[rmid].rec_len += rec_len; + stats->rmgr_stats[rmid].fpi_len += fpi_len; + + /* + * Update per-record statistics, where the record is identified by a + * combination of the RmgrId and the four bits of the xl_info field that + * are the rmgr's domain (resulting in sixteen possible entries per + * RmgrId). + */ + + recid = XLogRecGetInfo(record) >> 4; + + /* + * XACT records need to be handled differently. Those records use the + * first bit of those four bits for an optional flag variable and the + * following three bits for the opcode. We filter opcode out of xl_info + * and use it as the identifier of the record. + */ + if (rmid == RM_XACT_ID) + recid &= 0x07; + + stats->record_stats[rmid][recid].count++; + stats->record_stats[rmid][recid].rec_len += rec_len; + stats->record_stats[rmid][recid].fpi_len += fpi_len; +} + +/* + * Print a record to stdout + */ +static void +XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record) +{ + const char *id; + const RmgrDescData *desc = &RmgrDescTable[XLogRecGetRmid(record)]; + uint32 rec_len; + uint32 fpi_len; + RelFileNode rnode; + ForkNumber forknum; + BlockNumber blk; + int block_id; + uint8 info = XLogRecGetInfo(record); + XLogRecPtr xl_prev = XLogRecGetPrev(record); + StringInfoData s; + + XLogDumpRecordLen(record, &rec_len, &fpi_len); + + printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ", + desc->rm_name, + rec_len, XLogRecGetTotalLen(record), + XLogRecGetXid(record), + LSN_FORMAT_ARGS(record->ReadRecPtr), + LSN_FORMAT_ARGS(xl_prev)); + + id = desc->rm_identify(info); + if (id == NULL) + printf("desc: UNKNOWN (%x) ", info & ~XLR_INFO_MASK); + else + printf("desc: %s ", id); + + initStringInfo(&s); + desc->rm_desc(&s, record); + printf("%s", s.data); + pfree(s.data); + + if (!config->bkp_details) + { + /* print block references (short format) */ + for (block_id = 0; block_id <= record->max_block_id; block_id++) + { + if (!XLogRecHasBlockRef(record, block_id)) + continue; + + XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blk); + if (forknum != MAIN_FORKNUM) + printf(", blkref #%u: rel %u/%u/%u fork %s blk %u", + block_id, + rnode.spcNode, rnode.dbNode, rnode.relNode, + forkNames[forknum], + blk); + else + printf(", blkref #%u: rel %u/%u/%u blk %u", + block_id, + rnode.spcNode, rnode.dbNode, rnode.relNode, + blk); + if (XLogRecHasBlockImage(record, block_id)) + { + if (XLogRecBlockImageApply(record, block_id)) + printf(" FPW"); + else + printf(" FPW for WAL verification"); + } + } + putchar('\n'); + } + else + { + /* print block references (detailed format) */ + putchar('\n'); + for (block_id = 0; block_id <= record->max_block_id; block_id++) + { + if (!XLogRecHasBlockRef(record, block_id)) + continue; + + XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blk); + printf("\tblkref #%u: rel %u/%u/%u fork %s blk %u", + block_id, + rnode.spcNode, rnode.dbNode, rnode.relNode, + forkNames[forknum], + blk); + if (XLogRecHasBlockImage(record, block_id)) + { + if (record->blocks[block_id].bimg_info & + BKPIMAGE_IS_COMPRESSED) + { + printf(" (FPW%s); hole: offset: %u, length: %u, " + "compression saved: %u", + XLogRecBlockImageApply(record, block_id) ? + "" : " for WAL verification", + record->blocks[block_id].hole_offset, + record->blocks[block_id].hole_length, + BLCKSZ - + record->blocks[block_id].hole_length - + record->blocks[block_id].bimg_len); + } + else + { + printf(" (FPW%s); hole: offset: %u, length: %u", + XLogRecBlockImageApply(record, block_id) ? + "" : " for WAL verification", + record->blocks[block_id].hole_offset, + record->blocks[block_id].hole_length); + } + } + putchar('\n'); + } + } +} + +/* + * Display a single row of record counts and sizes for an rmgr or record. + */ +static void +XLogDumpStatsRow(const char *name, + uint64 n, uint64 total_count, + uint64 rec_len, uint64 total_rec_len, + uint64 fpi_len, uint64 total_fpi_len, + uint64 tot_len, uint64 total_len) +{ + double n_pct, + rec_len_pct, + fpi_len_pct, + tot_len_pct; + + n_pct = 0; + if (total_count != 0) + n_pct = 100 * (double) n / total_count; + + rec_len_pct = 0; + if (total_rec_len != 0) + rec_len_pct = 100 * (double) rec_len / total_rec_len; + + fpi_len_pct = 0; + if (total_fpi_len != 0) + fpi_len_pct = 100 * (double) fpi_len / total_fpi_len; + + tot_len_pct = 0; + if (total_len != 0) + tot_len_pct = 100 * (double) tot_len / total_len; + + printf("%-27s " + "%20" INT64_MODIFIER "u (%6.02f) " + "%20" INT64_MODIFIER "u (%6.02f) " + "%20" INT64_MODIFIER "u (%6.02f) " + "%20" INT64_MODIFIER "u (%6.02f)\n", + name, n, n_pct, rec_len, rec_len_pct, fpi_len, fpi_len_pct, + tot_len, tot_len_pct); +} + + +/* + * Display summary statistics about the records seen so far. + */ +static void +XLogDumpDisplayStats(XLogDumpConfig *config, XLogDumpStats *stats) +{ + int ri, + rj; + uint64 total_count = 0; + uint64 total_rec_len = 0; + uint64 total_fpi_len = 0; + uint64 total_len = 0; + double rec_len_pct, + fpi_len_pct; + + /* + * Each row shows its percentages of the total, so make a first pass to + * calculate column totals. + */ + + for (ri = 0; ri < RM_NEXT_ID; ri++) + { + total_count += stats->rmgr_stats[ri].count; + total_rec_len += stats->rmgr_stats[ri].rec_len; + total_fpi_len += stats->rmgr_stats[ri].fpi_len; + } + total_len = total_rec_len + total_fpi_len; + + /* + * 27 is strlen("Transaction/COMMIT_PREPARED"), 20 is strlen(2^64), 8 is + * strlen("(100.00%)") + */ + + printf("%-27s %20s %8s %20s %8s %20s %8s %20s %8s\n" + "%-27s %20s %8s %20s %8s %20s %8s %20s %8s\n", + "Type", "N", "(%)", "Record size", "(%)", "FPI size", "(%)", "Combined size", "(%)", + "----", "-", "---", "-----------", "---", "--------", "---", "-------------", "---"); + + for (ri = 0; ri < RM_NEXT_ID; ri++) + { + uint64 count, + rec_len, + fpi_len, + tot_len; + const RmgrDescData *desc = &RmgrDescTable[ri]; + + if (!config->stats_per_record) + { + count = stats->rmgr_stats[ri].count; + rec_len = stats->rmgr_stats[ri].rec_len; + fpi_len = stats->rmgr_stats[ri].fpi_len; + tot_len = rec_len + fpi_len; + + XLogDumpStatsRow(desc->rm_name, + count, total_count, rec_len, total_rec_len, + fpi_len, total_fpi_len, tot_len, total_len); + } + else + { + for (rj = 0; rj < MAX_XLINFO_TYPES; rj++) + { + const char *id; + + count = stats->record_stats[ri][rj].count; + rec_len = stats->record_stats[ri][rj].rec_len; + fpi_len = stats->record_stats[ri][rj].fpi_len; + tot_len = rec_len + fpi_len; + + /* Skip undefined combinations and ones that didn't occur */ + if (count == 0) + continue; + + /* the upper four bits in xl_info are the rmgr's */ + id = desc->rm_identify(rj << 4); + if (id == NULL) + id = psprintf("UNKNOWN (%x)", rj << 4); + + XLogDumpStatsRow(psprintf("%s/%s", desc->rm_name, id), + count, total_count, rec_len, total_rec_len, + fpi_len, total_fpi_len, tot_len, total_len); + } + } + } + + printf("%-27s %20s %8s %20s %8s %20s %8s %20s\n", + "", "--------", "", "--------", "", "--------", "", "--------"); + + /* + * The percentages in earlier rows were calculated against the column + * total, but the ones that follow are against the row total. Note that + * these are displayed with a % symbol to differentiate them from the + * earlier ones, and are thus up to 9 characters long. + */ + + rec_len_pct = 0; + if (total_len != 0) + rec_len_pct = 100 * (double) total_rec_len / total_len; + + fpi_len_pct = 0; + if (total_len != 0) + fpi_len_pct = 100 * (double) total_fpi_len / total_len; + + printf("%-27s " + "%20" INT64_MODIFIER "u %-9s" + "%20" INT64_MODIFIER "u %-9s" + "%20" INT64_MODIFIER "u %-9s" + "%20" INT64_MODIFIER "u %-6s\n", + "Total", stats->count, "", + total_rec_len, psprintf("[%.02f%%]", rec_len_pct), + total_fpi_len, psprintf("[%.02f%%]", fpi_len_pct), + total_len, "[100%]"); +} + +static void +usage(void) +{ + printf(_("%s decodes and displays PostgreSQL write-ahead logs for debugging.\n\n"), + progname); + printf(_("Usage:\n")); + printf(_(" %s [OPTION]... [STARTSEG [ENDSEG]]\n"), progname); + printf(_("\nOptions:\n")); + printf(_(" -b, --bkp-details output detailed information about backup blocks\n")); + printf(_(" -e, --end=RECPTR stop reading at WAL location RECPTR\n")); + printf(_(" -f, --follow keep retrying after reaching end of WAL\n")); + printf(_(" -n, --limit=N number of records to display\n")); + printf(_(" -p, --path=PATH directory in which to find log segment files or a\n" + " directory with a ./pg_wal that contains such files\n" + " (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n")); + printf(_(" -q, --quiet do not print any output, except for errors\n")); + printf(_(" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" + " use --rmgr=list to list valid resource manager names\n")); + printf(_(" -s, --start=RECPTR start reading at WAL location RECPTR\n")); + printf(_(" -t, --timeline=TLI timeline from which to read log records\n" + " (default: 1 or the value used in STARTSEG)\n")); + printf(_(" -V, --version output version information, then exit\n")); + printf(_(" -x, --xid=XID only show records with transaction ID XID\n")); + printf(_(" -z, --stats[=record] show statistics instead of records\n" + " (optionally, show per-record statistics)\n")); + printf(_(" -?, --help show this help, then exit\n")); + printf(_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); + printf(_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); +} + +int +main(int argc, char **argv) +{ + uint32 xlogid; + uint32 xrecoff; + XLogReaderState *xlogreader_state; + XLogDumpPrivate private; + XLogDumpConfig config; + XLogDumpStats stats; + XLogRecord *record; + XLogRecPtr first_record; + char *waldir = NULL; + char *errormsg; + + static struct option long_options[] = { + {"bkp-details", no_argument, NULL, 'b'}, + {"end", required_argument, NULL, 'e'}, + {"follow", no_argument, NULL, 'f'}, + {"help", no_argument, NULL, '?'}, + {"limit", required_argument, NULL, 'n'}, + {"path", required_argument, NULL, 'p'}, + {"quiet", no_argument, NULL, 'q'}, + {"rmgr", required_argument, NULL, 'r'}, + {"start", required_argument, NULL, 's'}, + {"timeline", required_argument, NULL, 't'}, + {"xid", required_argument, NULL, 'x'}, + {"version", no_argument, NULL, 'V'}, + {"stats", optional_argument, NULL, 'z'}, + {NULL, 0, NULL, 0} + }; + + int option; + int optindex = 0; + + pg_logging_init(argv[0]); + set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_waldump")); + progname = get_progname(argv[0]); + + if (argc > 1) + { + if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) + { + usage(); + exit(0); + } + if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) + { + puts("pg_waldump (PostgreSQL) " PG_VERSION); + exit(0); + } + } + + memset(&private, 0, sizeof(XLogDumpPrivate)); + memset(&config, 0, sizeof(XLogDumpConfig)); + memset(&stats, 0, sizeof(XLogDumpStats)); + + private.timeline = 1; + private.startptr = InvalidXLogRecPtr; + private.endptr = InvalidXLogRecPtr; + private.endptr_reached = false; + + config.quiet = false; + config.bkp_details = false; + config.stop_after_records = -1; + config.already_displayed_records = 0; + config.follow = false; + config.filter_by_rmgr = -1; + config.filter_by_xid = InvalidTransactionId; + config.filter_by_xid_enabled = false; + config.stats = false; + config.stats_per_record = false; + + if (argc <= 1) + { + pg_log_error("no arguments specified"); + goto bad_argument; + } + + while ((option = getopt_long(argc, argv, "be:fn:p:qr:s:t:x:z", + long_options, &optindex)) != -1) + { + switch (option) + { + case 'b': + config.bkp_details = true; + break; + case 'e': + if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2) + { + pg_log_error("could not parse end WAL location \"%s\"", + optarg); + goto bad_argument; + } + private.endptr = (uint64) xlogid << 32 | xrecoff; + break; + case 'f': + config.follow = true; + break; + case 'n': + if (sscanf(optarg, "%d", &config.stop_after_records) != 1) + { + pg_log_error("could not parse limit \"%s\"", optarg); + goto bad_argument; + } + break; + case 'p': + waldir = pg_strdup(optarg); + break; + case 'q': + config.quiet = true; + break; + case 'r': + { + int i; + + if (pg_strcasecmp(optarg, "list") == 0) + { + print_rmgr_list(); + exit(EXIT_SUCCESS); + } + + for (i = 0; i <= RM_MAX_ID; i++) + { + if (pg_strcasecmp(optarg, RmgrDescTable[i].rm_name) == 0) + { + config.filter_by_rmgr = i; + break; + } + } + + if (config.filter_by_rmgr == -1) + { + pg_log_error("resource manager \"%s\" does not exist", + optarg); + goto bad_argument; + } + } + break; + case 's': + if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2) + { + pg_log_error("could not parse start WAL location \"%s\"", + optarg); + goto bad_argument; + } + else + private.startptr = (uint64) xlogid << 32 | xrecoff; + break; + case 't': + if (sscanf(optarg, "%d", &private.timeline) != 1) + { + pg_log_error("could not parse timeline \"%s\"", optarg); + goto bad_argument; + } + break; + case 'x': + if (sscanf(optarg, "%u", &config.filter_by_xid) != 1) + { + pg_log_error("could not parse \"%s\" as a transaction ID", + optarg); + goto bad_argument; + } + config.filter_by_xid_enabled = true; + break; + case 'z': + config.stats = true; + config.stats_per_record = false; + if (optarg) + { + if (strcmp(optarg, "record") == 0) + config.stats_per_record = true; + else if (strcmp(optarg, "rmgr") != 0) + { + pg_log_error("unrecognized argument to --stats: %s", + optarg); + goto bad_argument; + } + } + break; + default: + goto bad_argument; + } + } + + if ((optind + 2) < argc) + { + pg_log_error("too many command-line arguments (first is \"%s\")", + argv[optind + 2]); + goto bad_argument; + } + + if (waldir != NULL) + { + /* validate path points to directory */ + if (!verify_directory(waldir)) + { + pg_log_error("could not open directory \"%s\": %m", waldir); + goto bad_argument; + } + } + + /* parse files as start/end boundaries, extract path if not specified */ + if (optind < argc) + { + char *directory = NULL; + char *fname = NULL; + int fd; + XLogSegNo segno; + + split_path(argv[optind], &directory, &fname); + + if (waldir == NULL && directory != NULL) + { + waldir = directory; + + if (!verify_directory(waldir)) + fatal_error("could not open directory \"%s\": %m", waldir); + } + + waldir = identify_target_directory(waldir, fname); + fd = open_file_in_directory(waldir, fname); + if (fd < 0) + fatal_error("could not open file \"%s\"", fname); + close(fd); + + /* parse position from file */ + XLogFromFileName(fname, &private.timeline, &segno, WalSegSz); + + if (XLogRecPtrIsInvalid(private.startptr)) + XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr); + else if (!XLByteInSeg(private.startptr, segno, WalSegSz)) + { + pg_log_error("start WAL location %X/%X is not inside file \"%s\"", + LSN_FORMAT_ARGS(private.startptr), + fname); + goto bad_argument; + } + + /* no second file specified, set end position */ + if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(private.endptr)) + XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, private.endptr); + + /* parse ENDSEG if passed */ + if (optind + 1 < argc) + { + XLogSegNo endsegno; + + /* ignore directory, already have that */ + split_path(argv[optind + 1], &directory, &fname); + + fd = open_file_in_directory(waldir, fname); + if (fd < 0) + fatal_error("could not open file \"%s\"", fname); + close(fd); + + /* parse position from file */ + XLogFromFileName(fname, &private.timeline, &endsegno, WalSegSz); + + if (endsegno < segno) + fatal_error("ENDSEG %s is before STARTSEG %s", + argv[optind + 1], argv[optind]); + + if (XLogRecPtrIsInvalid(private.endptr)) + XLogSegNoOffsetToRecPtr(endsegno + 1, 0, WalSegSz, + private.endptr); + + /* set segno to endsegno for check of --end */ + segno = endsegno; + } + + + if (!XLByteInSeg(private.endptr, segno, WalSegSz) && + private.endptr != (segno + 1) * WalSegSz) + { + pg_log_error("end WAL location %X/%X is not inside file \"%s\"", + LSN_FORMAT_ARGS(private.endptr), + argv[argc - 1]); + goto bad_argument; + } + } + else + waldir = identify_target_directory(waldir, NULL); + + /* we don't know what to print */ + if (XLogRecPtrIsInvalid(private.startptr)) + { + pg_log_error("no start WAL location given"); + goto bad_argument; + } + + /* done with argument parsing, do the actual work */ + + /* we have everything we need, start reading */ + xlogreader_state = + XLogReaderAllocate(WalSegSz, waldir, + XL_ROUTINE(.page_read = WALDumpReadPage, + .segment_open = WALDumpOpenSegment, + .segment_close = WALDumpCloseSegment), + &private); + if (!xlogreader_state) + fatal_error("out of memory"); + + /* first find a valid recptr to start from */ + first_record = XLogFindNextRecord(xlogreader_state, private.startptr); + + if (first_record == InvalidXLogRecPtr) + fatal_error("could not find a valid record after %X/%X", + LSN_FORMAT_ARGS(private.startptr)); + + /* + * Display a message that we're skipping data if `from` wasn't a pointer + * to the start of a record and also wasn't a pointer to the beginning of + * a segment (e.g. we were used in file mode). + */ + if (first_record != private.startptr && + XLogSegmentOffset(private.startptr, WalSegSz) != 0) + printf(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte\n", + "first record is after %X/%X, at %X/%X, skipping over %u bytes\n", + (first_record - private.startptr)), + LSN_FORMAT_ARGS(private.startptr), + LSN_FORMAT_ARGS(first_record), + (uint32) (first_record - private.startptr)); + + for (;;) + { + /* try to read the next record */ + record = XLogReadRecord(xlogreader_state, &errormsg); + if (!record) + { + if (!config.follow || private.endptr_reached) + break; + else + { + pg_usleep(1000000L); /* 1 second */ + continue; + } + } + + /* apply all specified filters */ + if (config.filter_by_rmgr != -1 && + config.filter_by_rmgr != record->xl_rmid) + continue; + + if (config.filter_by_xid_enabled && + config.filter_by_xid != record->xl_xid) + continue; + + /* perform any per-record work */ + if (!config.quiet) + { + if (config.stats == true) + XLogDumpCountRecord(&config, &stats, xlogreader_state); + else + XLogDumpDisplayRecord(&config, xlogreader_state); + } + + /* check whether we printed enough */ + config.already_displayed_records++; + if (config.stop_after_records > 0 && + config.already_displayed_records >= config.stop_after_records) + break; + } + + if (config.stats == true && !config.quiet) + XLogDumpDisplayStats(&config, &stats); + + if (errormsg) + fatal_error("error in WAL record at %X/%X: %s", + LSN_FORMAT_ARGS(xlogreader_state->ReadRecPtr), + errormsg); + + XLogReaderFree(xlogreader_state); + + return EXIT_SUCCESS; + +bad_argument: + fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); + return EXIT_FAILURE; +} diff --git a/src/bin/pg_waldump/po/cs.po b/src/bin/pg_waldump/po/cs.po new file mode 100644 index 0000000..70ae649 --- /dev/null +++ b/src/bin/pg_waldump/po/cs.po @@ -0,0 +1,338 @@ +# LANGUAGE message translation file for pg_waldump +# Copyright (C) 2018 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_waldump (PostgreSQL) package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 11\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-10-31 16:14+0000\n" +"PO-Revision-Date: 2021-09-16 09:15+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Poedit 2.4.1\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "fatal: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "error: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "warning: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "nelze otevřít soubor \"%s\": %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale hlavička WAL souboru \"%s\" udává %d byte" +msgstr[1] "velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale hlavička WAL souboru \"%s\" udává %d byty" +msgstr[2] "velikost WAL segmentu musí být mocnina dvou mezi 1 MB a 1 GB, ale hlavička WAL souboru \"%s\" udává %d bytů" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "nelze číst soubor \"%s\": %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "nelze číst soubor \"%s\": načteno %d z %zu" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "nelze najít WAL soubor \"%s\"" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "nelze najít žádný WAL soubor" + +#: pg_waldump.c:318 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "nelze najít soubor \"%s\": %m" + +#: pg_waldump.c:367 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "nelze číst ze souboru %s, offset %u : %m" + +#: pg_waldump.c:371 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "nelze číst ze souboru %s, offset %u, načteno %d z %zu" + +#: pg_waldump.c:720 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s dekóduje a zobrazuje PostgreSQL write-ahead logy pro účely debugování.\n" +"\n" + +#: pg_waldump.c:722 +#, c-format +msgid "Usage:\n" +msgstr "Použití:\n" + +#: pg_waldump.c:723 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [OPTION]... [STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:724 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Přepínače:\n" + +#: pg_waldump.c:725 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details output detailed information about backup blocks\n" + +#: pg_waldump.c:726 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR přestane číst WAL na pozici RECPTR\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow dále to zkoušet po dosažení konce WAL\n" + +#: pg_waldump.c:728 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N počet záznamů pro zobrazení\n" + +#: pg_waldump.c:729 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=PATH adresář ve kterém hledat log segmenty nebo\n" +" adresář s ./pg_wal který tyto soubory obsahuje\n" +" (implicitní: aktuální adresář, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:732 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet nevypisovat žádné zprávy, s výjimkou chyb\n" + +#: pg_waldump.c:733 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR zobrazí pouze záznamy generované resource managerem RMGR;\n" +" použijte --rmgr=list pro seznam platných jmen resource managerů\n" + +#: pg_waldump.c:735 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR začne číst WAL na pozici RECPTR\n" + +#: pg_waldump.c:736 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI timeline ze které číst log záznamy\n" +" (implicitní: 1 nebo hodnota v STARTSEG)\n" + +#: pg_waldump.c:738 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version vypiš informace o verzi, potom skonči\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID zobrazí pouze záznamy pro transakci s ID XID\n" + +#: pg_waldump.c:740 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] zobrazí statistiky namísto záznamů\n" +" (volitelně, zobrazí per-record statistiky)\n" + +#: pg_waldump.c:742 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help ukaž tuto nápovědu, potom skonči\n" + +#: pg_waldump.c:743 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Chyby hlašte na <%s>.\n" + +#: pg_waldump.c:744 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s domácí stránka: <%s>\n" + +#: pg_waldump.c:821 +#, c-format +msgid "no arguments specified" +msgstr "nezadán žádný argument" + +#: pg_waldump.c:836 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "nelze naparsovat koncovou WAL pozici \"%s\"" + +#: pg_waldump.c:848 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "nelze naparsovat limit \"%s\"" + +#: pg_waldump.c:879 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "resource manager \"%s\" neexistuje" + +#: pg_waldump.c:888 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "nelze naparsovat počáteční WAL pozici \"%s\"" + +#: pg_waldump.c:898 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "nelze naparsovat timeline \"%s\"" + +#: pg_waldump.c:905 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "nelze naparsovat \"%s\" jako ID transakce" + +#: pg_waldump.c:920 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "nerozpoznaný argument pro --stats: %s" + +#: pg_waldump.c:933 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "příliš mnoho argumentů v příkazové řádce (první je \"%s\")" + +#: pg_waldump.c:943 pg_waldump.c:963 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "nelze otevřít adresář \"%s\": %m" + +#: pg_waldump.c:969 pg_waldump.c:1000 +#, c-format +msgid "could not open file \"%s\"" +msgstr "nelze otevřít soubor \"%s\"" + +#: pg_waldump.c:979 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "počátační WAL pozice %X/%X není v souboru \"%s\"" + +#: pg_waldump.c:1007 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s je před STARTSEG %s" + +#: pg_waldump.c:1022 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "koncová WAL pozice %X/%X není v souboru \"%s\"" + +#: pg_waldump.c:1035 +#, c-format +msgid "no start WAL location given" +msgstr "není zadána žádná WAL pozice" + +#: pg_waldump.c:1049 +#, c-format +msgid "out of memory" +msgstr "nedostatek paměti" + +#: pg_waldump.c:1055 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "nelze najít platný záznam po %X/%X" + +#: pg_waldump.c:1066 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "první záznam po %X/%X, na %X/%X, přeskakuji %u bytů\n" +msgstr[1] "první záznam po %X/%X, na %X/%X, přeskakuji %u byty\n" +msgstr[2] "první záznam po %X/%X, na %X/%X, přeskakuji %u bytů\n" + +#: pg_waldump.c:1117 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "chyba ve WAL záznamu na %X/%X: %s" + +#: pg_waldump.c:1127 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Zkuste \"%s --help\" pro více informací.\n" + +#~ msgid "%s: FATAL: " +#~ msgstr "%s: FATAL: " + +#~ msgid "not enough data in file \"%s\"" +#~ msgstr "nedostatek dat v souboru \"%s\"" + +#~ msgid "could not open directory \"%s\": %s" +#~ msgstr "nelze otevřít adresář \"%s\": %s" + +#~ msgid "path \"%s\" could not be opened: %s" +#~ msgstr "cestu \"%s\" nelze otevřít: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n" +#~ msgstr "" +#~ "\n" +#~ "Chyby hlaste na adresu <pgsql-bugs@postgresql.org>.\n" + +#~ msgid "could not seek in log file %s to offset %u: %s" +#~ msgstr "nelze nastavit pozici (seek) v log souboru %s na offset %u: %s" + +#~ msgid "could not read file \"%s\": %s" +#~ msgstr "nelze číst soubor \"%s\": %s" + +#~ msgid "could not open file \"%s\": %s" +#~ msgstr "nelze otevřít soubor \"%s\": %s" diff --git a/src/bin/pg_waldump/po/de.po b/src/bin/pg_waldump/po/de.po new file mode 100644 index 0000000..99f2fd1 --- /dev/null +++ b/src/bin/pg_waldump/po/de.po @@ -0,0 +1,307 @@ +# German message translation file for pg_waldump +# Copyright (C) 2020 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Peter Eisentraut <peter@eisentraut.org>, 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 13\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-04-21 05:14+0000\n" +"PO-Revision-Date: 2020-04-21 19:02+0200\n" +"Last-Translator: Peter Eisentraut <peter@eisentraut.org>\n" +"Language-Team: German <pgsql-translators@postgresql.org>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "Fatal: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "Fehler: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "Warnung: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "konnte Datei »%s« nicht öffnen: %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber der Kopf der WAL-Datei »%s« gibt %d Byte an" +msgstr[1] "WAL-Segmentgröße muss eine Zweierpotenz zwischen 1 MB und 1 GB sein, aber der Kopf der WAL-Datei »%s« gibt %d Bytes an" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "konnte Datei »%s« nicht lesen: %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "konnte Datei »%s« nicht lesen: %d von %zu gelesen" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "konnte WAL-Datei »%s« nicht finden" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "konnte keine WAL-Datei finden" + +#: pg_waldump.c:319 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "konnte Datei »%s« nicht finden: %m" + +#: pg_waldump.c:359 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "konnte nicht aus Datei %s, Position %u lesen: %m" + +#: pg_waldump.c:363 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "konnte nicht aus Datei %s, Position %u lesen: %d von %zu gelesen" + +#: pg_waldump.c:712 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s dekodiert und zeigt PostgreSQL-Write-Ahead-Logs zum Debuggen.\n" +"\n" + +#: pg_waldump.c:714 +#, c-format +msgid "Usage:\n" +msgstr "Aufruf:\n" + +#: pg_waldump.c:715 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [OPTION]... [STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:716 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Optionen:\n" + +#: pg_waldump.c:717 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details detaillierte Informationen über Backup-Blöcke ausgeben\n" + +#: pg_waldump.c:718 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR bei WAL-Position RECPTR zu lesen aufhören\n" + +#: pg_waldump.c:719 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow am Ende des WAL weiter versuchen\n" + +#: pg_waldump.c:720 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N Anzahl der anzuzeigenden Datensätze\n" + +#: pg_waldump.c:721 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=PATH Verzeichnis mit den Logsegmentdateien oder Verzeichnis\n" +" mit ./pg_wal mit solchen Dateien (Vorgabe: aktuelles\n" +" Verzeichnis, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:724 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet keine Ausgabe, außer Fehler\n" + +#: pg_waldump.c:725 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR nur Datensätze erzeugt von Resource-Manager RMGR zeigen;\n" +" --rmgr=list zeigt gültige Resource-Manager-Namen\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR bei WAL-Position RECPTR zu lesen anfangen\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=ZAHL Zeitleiste aus der Datensätze gelesen werden sollen\n" +" (Vorgabe: 1 oder der in STARTSEG verwendete Wert)\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version Versionsinformationen anzeigen, dann beenden\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID nur Datensätze mit Transaktions-ID XID zeigen\n" + +#: pg_waldump.c:732 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] Statistiken statt Datensätzen anzeigen\n" +" (optional Statistiken pro Datensatz zeigen)\n" + +#: pg_waldump.c:734 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help diese Hilfe anzeigen, dann beenden\n" + +#: pg_waldump.c:735 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Berichten Sie Fehler an <%s>.\n" + +#: pg_waldump.c:736 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s Homepage: <%s>\n" + +#: pg_waldump.c:813 +#, c-format +msgid "no arguments specified" +msgstr "keine Argumente angegeben" + +#: pg_waldump.c:828 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "konnte WAL-Endposition »%s« nicht parsen" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "konnte Limit »%s« nicht parsen" + +#: pg_waldump.c:871 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "Resouce-Manager »%s« existiert nicht" + +#: pg_waldump.c:880 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "konnte WAL-Startposition »%s« nicht parsen" + +#: pg_waldump.c:890 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "konnte Zeitleiste »%s« nicht parsen" + +#: pg_waldump.c:897 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "konnte »%s« nicht als gültige Transaktions-ID parsen" + +#: pg_waldump.c:912 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "unbekanntes Argument für --stats: %s" + +#: pg_waldump.c:925 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "zu viele Kommandozeilenargumente (das erste ist »%s«)" + +#: pg_waldump.c:935 pg_waldump.c:955 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "konnte Verzeichnis »%s« nicht öffnen: %m" + +#: pg_waldump.c:961 pg_waldump.c:992 +#, c-format +msgid "could not open file \"%s\"" +msgstr "konnte Datei »%s« nicht öffnen" + +#: pg_waldump.c:971 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "WAL-Startposition %X/%X ist nicht innerhalb der Datei »%s«" + +#: pg_waldump.c:999 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s kommt vor STARTSEG %s" + +#: pg_waldump.c:1014 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "WAL-Endposition %X/%X ist nicht innerhalb der Datei »%s«" + +#: pg_waldump.c:1027 +#, c-format +msgid "no start WAL location given" +msgstr "keine WAL-Startposition angegeben" + +#: pg_waldump.c:1037 +#, c-format +msgid "out of memory" +msgstr "Speicher aufgebraucht" + +#: pg_waldump.c:1043 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "konnte keinen gültigen Datensatz nach %X/%X finden" + +#: pg_waldump.c:1054 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "erster Datensatz kommt nach %X/%X, bei %X/%X, %u Byte wurde übersprungen\n" +msgstr[1] "erster Datensatz kommt nach %X/%X, bei %X/%X, %u Bytes wurden übersprungen\n" + +#: pg_waldump.c:1105 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "Fehler in WAL-Eintrag bei %X/%X: %s" + +#: pg_waldump.c:1115 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Versuchen Sie »%s --help« für weitere Informationen.\n" diff --git a/src/bin/pg_waldump/po/el.po b/src/bin/pg_waldump/po/el.po new file mode 100644 index 0000000..a5d10d6 --- /dev/null +++ b/src/bin/pg_waldump/po/el.po @@ -0,0 +1,310 @@ +# Greek message translation file for pg_waldump +# Copyright (C) 2021 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_waldump (PostgreSQL) package. +# Georgios Kokolatos <gkokolatos@pm.me>, 2021. +# +# +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-07-16 08:15+0000\n" +"PO-Revision-Date: 2021-07-16 10:50+0200\n" +"Last-Translator: Georgios Kokolatos <gkokolatos@pm.me>\n" +"Language-Team: \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 3.0\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "κρίσιμο: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "σφάλμα: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "προειδοποίηση: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου «%s»: %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "η τιμή του μεγέθους τμήματος WAL πρέπει να ανήκει σε δύναμη του δύο μεταξύ 1 MB και 1 GB, αλλά η κεφαλίδα «%s» του αρχείου WAL καθορίζει %d byte" +msgstr[1] "η τιμή του μεγέθους τμήματος WAL πρέπει να ανήκει σε δύναμη του δύο μεταξύ 1 MB και 1 GB, αλλά η κεφαλίδα «%s» του αρχείου WAL καθορίζει %d bytes" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου «%s»: %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "δεν ήταν δυνατή η ανάγνωση του αρχείου «%s»: ανέγνωσε %d από %zu" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "δεν ήταν δυνατός ο εντοπισμός του αρχείου WAL «%s»" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "δεν ήταν δυνατή η εύρεση οποιουδήποτε αρχείου WAL" + +#: pg_waldump.c:318 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "δεν ήταν δυνατή η εύρεση του αρχείου «%s»: %m" + +#: pg_waldump.c:367 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο %s, μετατόπιση %u: %m" + +#: pg_waldump.c:371 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "δεν ήταν δυνατή η ανάγνωση από αρχείο %s, μετατόπιση %u: ανέγνωσε %d από %zu" + +#: pg_waldump.c:724 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s αποκωδικοποιεί και εμφανίζει αρχεία καταγραφής εμπρόσθιας-εγγραφής PostgreSQL για αποσφαλμάτωση.\n" +"\n" + +#: pg_waldump.c:726 +#, c-format +msgid "Usage:\n" +msgstr "Χρήση:\n" + +#: pg_waldump.c:727 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [ΕΠΙΛΟΓΗ]... [STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Επιλογές:\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details πάραγε λεπτομερείς πληροφορίες σχετικά με τα μπλοκ αντιγράφων ασφαλείας\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR σταμάτησε την ανάγνωση στη τοποθεσία WAL RECPTR\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow εξακολούθησε την προσπάθεια μετά την επίτευξη του τέλους του WAL\n" + +#: pg_waldump.c:732 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N αριθμός των εγγραφών για εμφάνιση\n" + +#: pg_waldump.c:733 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=PATH κατάλογος στον οποίο βρίσκονται αρχεία τμήματος καταγραφής ή\n" +" ένα κατάλογο με ./pg_wal που περιέχει τέτοια αρχεία\n" +" (προεπιλογή: τρέχων κατάλογος, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet να μην εκτυπωθεί καμία έξοδος, εκτός από σφάλματα\n" + +#: pg_waldump.c:737 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR εμφάνισε μόνο εγγραφές που δημιουργούνται από τον διαχειριστή πόρων RMGR·\n" +" χρησιμοποίησε --rmgr=list για την παράθεση έγκυρων ονομάτων διαχειριστών πόρων\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR άρχισε την ανάγνωση WAL από την τοποθεσία RECPTR\n" + +#: pg_waldump.c:740 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI χρονογραμή από την οποία να αναγνωστούν εγγραφές καταγραφής\n" +" (προεπιλογή: 1 ή η τιμή που χρησιμοποιήθηκε στο STARTSEG)\n" + +#: pg_waldump.c:742 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version εμφάνισε πληροφορίες έκδοσης, στη συνέχεια έξοδος\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID εμφάνισε μόνο εγγραφές με ID συναλλαγής XID\n" + +#: pg_waldump.c:744 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] εμφάνισε στατιστικά στοιχεία αντί για εγγραφές\n" +" (προαιρετικά, εμφάνισε στατιστικά στοιχεία ανά εγγραφή)\n" + +#: pg_waldump.c:746 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help εμφάνισε αυτό το μήνυμα βοήθειας, στη συνέχεια έξοδος\n" + +#: pg_waldump.c:747 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Υποβάλετε αναφορές σφάλματων σε <%s>.\n" + +#: pg_waldump.c:748 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s αρχική σελίδα: <%s>\n" + +#: pg_waldump.c:825 +#, c-format +msgid "no arguments specified" +msgstr "δεν καθορίστηκαν παράμετροι" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της τελικής τοποθεσίας WAL «%s»" + +#: pg_waldump.c:852 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση του ορίου «%s»" + +#: pg_waldump.c:883 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "ο διαχειριστής πόρων «%s» δεν υπάρχει" + +#: pg_waldump.c:892 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της αρχικής τοποθεσίας WAL «%s»" + +#: pg_waldump.c:902 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "δεν ήταν δυνατή η ανάλυση της χρονογραμμής «%s»" + +#: pg_waldump.c:909 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "δεν ήταν δυνατή η ανάλυση του «%s» ως ID συναλλαγής" + +#: pg_waldump.c:924 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "μη αναγνωρισμένη παράμετρος για --stats: %s" + +#: pg_waldump.c:937 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "πάρα πολλές παράμετροι εισόδου από την γραμμή εντολών (η πρώτη είναι η «%s»)" + +#: pg_waldump.c:947 pg_waldump.c:967 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "δεν ήταν δυνατό το άνοιγμα του καταλόγου «%s»: %m" + +#: pg_waldump.c:973 pg_waldump.c:1003 +#, c-format +msgid "could not open file \"%s\"" +msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου «%s»" + +#: pg_waldump.c:983 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "τοποθεσία εκκίνησης WAL %X/%X δεν βρίσκεται μέσα στο αρχείο «%s»" + +#: pg_waldump.c:1010 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s βρίσκεται πριν από STARTSEG %s" + +#: pg_waldump.c:1025 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "η τελική τοποθεσία WAL %X/%X δεν βρίσκεται μέσα στο αρχείο «%s»" + +#: pg_waldump.c:1037 +#, c-format +msgid "no start WAL location given" +msgstr "δεν δόθηκε καμία τοποθεσία έναρξης WAL" + +#: pg_waldump.c:1051 +#, c-format +msgid "out of memory" +msgstr "έλλειψη μνήμης" + +#: pg_waldump.c:1057 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "δεν ήταν δυνατή η εύρεση έγκυρης εγγραφής μετά %X/%X" + +#: pg_waldump.c:1067 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "πρώτη εγγραφή βρίσκεται μετά από %X/%X, σε %X/%X, παρακάμπτοντας %u byte\n" +msgstr[1] "πρώτη εγγραφή βρίσκεται μετά από %X/%X, σε %X/%X, παρακάμπτοντας %u bytes\n" + +#: pg_waldump.c:1118 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "σφάλμα στην εγγραφή WAL στο %X/%X: %s" + +#: pg_waldump.c:1127 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Δοκιμάστε «%s --help» για περισσότερες πληροφορίες.\n" diff --git a/src/bin/pg_waldump/po/es.po b/src/bin/pg_waldump/po/es.po new file mode 100644 index 0000000..f582a75 --- /dev/null +++ b/src/bin/pg_waldump/po/es.po @@ -0,0 +1,311 @@ +# Spanish message translation file for pg_waldump +# +# Copyright (c) 2017-2021, PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# +# Carlos Chapi <carlos.chapi@2ndquadrant.com>, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2022-08-07 20:33+0000\n" +"PO-Revision-Date: 2021-09-16 09:26+0200\n" +"Last-Translator: Carlos Chapi <carlos.chapi@2ndquadrant.com>\n" +"Language-Team: PgSQL-es-Ayuda <pgsql-es-ayuda@lists.postgresql.org>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.2\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "fatal: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "error: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "precaución: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "no se pudo abrir el archivo «%s»: %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "el tamaño de segmento WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero la cabecera del archivo WAL «%s» especifica %d byte" +msgstr[1] "el tamaño de segmento WAL debe ser una potencia de dos entre 1 MB y 1 GB, pero la cabecera del archivo WAL «%s» especifica %d bytes" + +#: pg_waldump.c:208 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "no se pudo leer el archivo «%s»: %m" + +#: pg_waldump.c:211 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "no se pudo leer el archivo «%s»: leídos %d de %zu" + +#: pg_waldump.c:272 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "no se pudo ubicar el archivo WAL «%s»" + +#: pg_waldump.c:274 +#, c-format +msgid "could not find any WAL file" +msgstr "no se pudo encontrar ningún archivo WAL" + +#: pg_waldump.c:315 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "no se pudo encontrar el archivo «%s»: %m" + +#: pg_waldump.c:364 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "no se pudo leer desde el archivo «%s» en la posición %u: %m" + +# XXX why talk about "log segment" instead of "file"? +#: pg_waldump.c:368 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "no se pudo leer del archivo %s, posición %u: leídos %d de %zu" + +#: pg_waldump.c:721 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s decodifica y muestra segmentos de WAL de PostgreSQL para depuración.\n" +"\n" + +#: pg_waldump.c:723 +#, c-format +msgid "Usage:\n" +msgstr "Empleo:\n" + +#: pg_waldump.c:724 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [OPCIÓN]... [SEGINICIAL [SEGFINAL]]\n" + +#: pg_waldump.c:725 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Opciones:\n" + +#: pg_waldump.c:726 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details mostrar información detallada sobre bloques de respaldo\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR detener la lectura del WAL en la posición RECPTR\n" + +#: pg_waldump.c:728 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow seguir reintentando después de alcanzar el final del WAL\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N número de registros a mostrar\n" + +#: pg_waldump.c:730 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=RUTA directorio donde buscar los archivos de segmento de WAL\n" +" o un directorio con un ./pg_wal que contenga tales archivos\n" +" (por omisión: directorio actual, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:733 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet no escribir ningún mensaje, excepto errores\n" + +#: pg_waldump.c:734 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=GREC sólo mostrar registros generados por el gestor de\n" +" recursos GREC; use --rmgr=list para listar nombres válidos\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR empezar a leer el WAL en la posición RECPTR\n" + +#: pg_waldump.c:737 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI timeline del cual leer los registros de WAL\n" +" (por omisión: 1 o el valor usado en SEGINICIAL)\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version mostrar información de versión, luego salir\n" + +#: pg_waldump.c:740 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID sólo mostrar registros con el id de transacción XID\n" + +#: pg_waldump.c:741 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=registro] mostrar estadísticas en lugar de registros\n" +" (opcionalmente, mostrar estadísticas por registro)\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help mostrar esta ayuda, luego salir\n" + +#: pg_waldump.c:744 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Reporte errores a <%s>.\n" + +#: pg_waldump.c:745 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Sitio web de %s: <%s>\n" + +#: pg_waldump.c:822 +#, c-format +msgid "no arguments specified" +msgstr "no se especificó ningún argumento" + +#: pg_waldump.c:837 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "no se pudo interpretar la posición final de WAL «%s»" + +#: pg_waldump.c:849 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "no se pudo interpretar el límite «%s»" + +#: pg_waldump.c:880 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "el gestor de recursos «%s» no existe" + +#: pg_waldump.c:889 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "no se pudo interpretar la posición inicial de WAL «%s»" + +#: pg_waldump.c:899 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "no se pudo interpretar el timeline «%s»" + +#: pg_waldump.c:906 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "no se pudo interpretar «%s» como un id de transacción" + +#: pg_waldump.c:921 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "parámetro no reconocido para --stats: %s" + +#: pg_waldump.c:934 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "demasiados argumentos en la línea de órdenes (el primero es «%s»)" + +#: pg_waldump.c:944 pg_waldump.c:964 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "no se pudo abrir el directorio «%s»: %m" + +#: pg_waldump.c:970 pg_waldump.c:1000 +#, c-format +msgid "could not open file \"%s\"" +msgstr "no se pudo abrir el archivo «%s»" + +#: pg_waldump.c:980 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "la posición inicial de WAL %X/%X no está en el archivo «%s»" + +#: pg_waldump.c:1007 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "SEGFINAL %s está antes del SEGINICIAL %s" + +#: pg_waldump.c:1022 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "la posición final de WAL %X/%X no está en el archivo «%s»" + +#: pg_waldump.c:1034 +#, c-format +msgid "no start WAL location given" +msgstr "no se especificó posición inicial de WAL" + +#: pg_waldump.c:1048 +#, c-format +msgid "out of memory" +msgstr "memoria agotada" + +#: pg_waldump.c:1054 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "no se pudo encontrar un registro válido después de %X/%X" + +#: pg_waldump.c:1064 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "el primer registro está ubicado después de %X/%X, en %X/%X, saltándose %u byte\n" +msgstr[1] "el primer registro está ubicado después de %X/%X, en %X/%X, saltándose %u bytes\n" + +#: pg_waldump.c:1115 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "error en registro de WAL en %X/%X: %s" + +#: pg_waldump.c:1124 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Pruebe «%s --help» para mayor información.\n" diff --git a/src/bin/pg_waldump/po/fr.po b/src/bin/pg_waldump/po/fr.po new file mode 100644 index 0000000..12e26ca --- /dev/null +++ b/src/bin/pg_waldump/po/fr.po @@ -0,0 +1,362 @@ +# LANGUAGE message translation file for pg_waldump +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 12\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-04-16 06:15+0000\n" +"PO-Revision-Date: 2020-04-16 14:09+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "fatal : " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "erreur : " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "attention : " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "n'a pas pu ouvrir le fichier « %s » : %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "La taille du segment WAL doit être une puissance de deux entre 1 Mo et 1 Go, mais l'en-tête du fichier WAL « %s » indique %d octet" +msgstr[1] "La taille du segment WAL doit être une puissance de deux entre 1 Mo et 1 Go, mais l'en-tête du fichier WAL « %s » indique %d octets" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "n'a pas pu lire le fichier « %s » : %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "n'a pas pu lire le fichier « %s » : a lu %d sur %zu" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "n'a pas pu trouver le fichier WAL « %s »" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "n'a pas pu trouver un seul fichier WAL" + +#: pg_waldump.c:319 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "n'a pas pu trouver le fichier « %s » : %m" + +#: pg_waldump.c:359 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "n'a pas pu lire à partir du fichier « %s », décalage %u : %m" + +#: pg_waldump.c:363 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "n'a pas pu lire à partir du fichier %s, décalage %u : %d lu sur %zu" + +#: pg_waldump.c:712 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s décode et affiche les journaux de transactions PostgreSQL pour du\n" +"débogage.\n" +"\n" + +#: pg_waldump.c:714 +#, c-format +msgid "Usage:\n" +msgstr "Usage :\n" + +#: pg_waldump.c:715 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [OPTION]... [SEG_DEBUT [SEG_FIN]]\n" + +#: pg_waldump.c:716 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Options :\n" + +#: pg_waldump.c:717 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr "" +" -b, --bkp-details affiche des informations détaillées sur les\n" +" blocs de sauvegarde\n" + +#: pg_waldump.c:718 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr "" +" -e, --end=RECPTR arrête la lecture des journaux de transactions à\n" +" l'emplacement RECPTR\n" + +#: pg_waldump.c:719 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr "" +" -f, --follow continue après avoir atteint la fin des journaux\n" +" de transactions\n" + +#: pg_waldump.c:720 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N nombre d'enregistrements à afficher\n" + +#: pg_waldump.c:721 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=CHEMIN répertoire où trouver les fichiers des segments\n" +" de journaux de transactions ou un répertoire\n" +" avec ./pg_wal qui contient ces fichiers (par\n" +" défaut : répertoire courant, ./pg_wal,\n" +" $PGDATA/pg_wal)\n" + +#: pg_waldump.c:724 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet n'écrit aucun message, sauf en cas d'erreur\n" + +#: pg_waldump.c:725 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR affiche seulement les enregistrements générés\n" +" par le gestionnaire de ressources RMGR, utilisez\n" +" --rmgr=list pour avoir une liste des noms valides\n" +" de gestionnaires de ressources\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr "" +" -s, --start=RECPTR commence à lire à l'emplacement RECPTR des\n" +" journaux de transactions\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI timeline à partir de laquelle lire les\n" +" enregistrements des journaux (par défaut: 1 ou\n" +" la valeur utilisée dans SEG_DÉBUT)\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version affiche la version puis quitte\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr "" +" -x, --xid=XID affiche seulement des enregistrements avec\n" +" l'identifiant de transaction XID\n" + +#: pg_waldump.c:732 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=enregistrement] affiche des statistiques à la place\n" +" d'enregistrements (en option, affiche des\n" +" statistiques par enregistrement)\n" + +#: pg_waldump.c:734 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help affiche cette aide puis quitte\n" + +#: pg_waldump.c:735 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapporter les bogues à <%s>.\n" + +#: pg_waldump.c:736 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Page d'accueil %s : <%s>\n" + +#: pg_waldump.c:813 +#, c-format +msgid "no arguments specified" +msgstr "aucun argument spécifié" + +#: pg_waldump.c:828 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "n'a pas pu analyser l'emplacement de fin du journal de transactions « %s »" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "n'a pas pu analyser la limite « %s »" + +#: pg_waldump.c:871 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "le gestionnaire de ressources « %s » n'existe pas" + +#: pg_waldump.c:880 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "n'a pas pu analyser l'emplacement de début du journal de transactions « %s »" + +#: pg_waldump.c:890 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "n'a pas pu analyser la timeline « %s »" + +#: pg_waldump.c:897 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "n'a pas pu analyser « %s » comme un identifiant de transaction" + +#: pg_waldump.c:912 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "argument non reconnu pour --stats : %s" + +#: pg_waldump.c:925 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "trop d'arguments en ligne de commande (le premier étant « %s »)" + +#: pg_waldump.c:935 pg_waldump.c:955 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "n'a pas pu ouvrir le répertoire « %s » : %m" + +#: pg_waldump.c:961 pg_waldump.c:992 +#, c-format +msgid "could not open file \"%s\"" +msgstr "n'a pas pu ouvrir le fichier « %s »" + +#: pg_waldump.c:971 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "l'emplacement de début des journaux de transactions %X/%X n'est pas à l'intérieur du fichier « %s »" + +#: pg_waldump.c:999 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "SEG_FIN %s est avant SEG_DÉBUT %s" + +#: pg_waldump.c:1014 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "l'emplacement de fin des journaux de transactions %X/%X n'est pas à l'intérieur du fichier « %s »" + +#: pg_waldump.c:1027 +#, c-format +msgid "no start WAL location given" +msgstr "pas d'emplacement donné de début du journal de transactions" + +#: pg_waldump.c:1037 +#, c-format +msgid "out of memory" +msgstr "mémoire épuisée" + +#: pg_waldump.c:1043 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "n'a pas pu trouver un enregistrement valide après %X/%X" + +#: pg_waldump.c:1054 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "le premier enregistrement se trouve après %X/%X, à %X/%X, ignore %u octet\n" +msgstr[1] "le premier enregistrement se trouve après %X/%X, à %X/%X, ignore %u octets\n" + +#: pg_waldump.c:1105 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "erreur dans l'enregistrement des journaux de transactions à %X/%X : %s" + +#: pg_waldump.c:1115 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Essayez « %s --help » pour plus d'informations.\n" + +#~ msgid "cannot open directory \"%s\": %s" +#~ msgstr "ne peut pas ouvrir le répertoire « %s » : %s" + +#~ msgid "could not seek in log segment %s to offset %u: %s" +#~ msgstr "n'a pas pu rechercher dans le segment %s du journal de transactions au décalage %u : %s" + +#~ msgid "not enough data in file \"%s\"" +#~ msgstr "données insuffisantes dans le fichier « %s »" + +#~ msgid "%s: FATAL: " +#~ msgstr "%s : FATAL : " + +#~ msgid "could not open directory \"%s\": %s" +#~ msgstr "n'a pas pu ouvrir le répertoire « %s » : %s" + +#~ msgid "path \"%s\" could not be opened: %s" +#~ msgstr "le chemin « %s » n'a pas pu être ouvert : %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n" +#~ msgstr "" +#~ "\n" +#~ "Rapporter les bogues à <pgsql-bugs@lists.postgresql.org>.\n" + +#~ msgid "could not read from log file %s, offset %u, length %d: %s" +#~ msgstr "n'a pas pu lire à partir du segment %s du journal de transactions, décalage %u, longueur %d : %s" + +#~ msgid "could not seek in log file %s to offset %u: %s" +#~ msgstr "n'a pas pu se déplacer dans le fichier de transactions %s au décalage %u : %s" + +#~ msgid "could not read file \"%s\": %s" +#~ msgstr "n'a pas pu lire le fichier « %s » : %s" + +#~ msgid "could not open file \"%s\": %s" +#~ msgstr "n'a pas pu ouvrir le fichier « %s » : %s" diff --git a/src/bin/pg_waldump/po/ja.po b/src/bin/pg_waldump/po/ja.po new file mode 100644 index 0000000..80938c3 --- /dev/null +++ b/src/bin/pg_waldump/po/ja.po @@ -0,0 +1,308 @@ +# Japanese message translation file for pg_waldump +# Copyright (C) 2022 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL 14)\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-08-25 17:22+0900\n" +"PO-Revision-Date: 2021-05-17 16:03+0900\n" +"Last-Translator: Kyotaro Horiguchi <horikyota.ntt@gmail.com>\n" +"Language-Team: Japan PostgreSQL Users Group <jpug-doc@ml.postgresql.jp>\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n!=1;\n" +"X-Generator: Poedit 1.8.13\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "致命的エラー: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "エラー: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "警告: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "ファイル\"%s\"をオープンできませんでした: %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "WALセグメントのサイズは1MBと1GBの間の2の累乗でなければなりません、しかしWALファイル\"%s\"のヘッダでは%dバイトとなっています" +msgstr[1] "WALセグメントのサイズは1MBと1GBの間の2の累乗でなければなりません、しかしWALファイル\"%s\"のヘッダでは%dバイトとなっています" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "ファイル\"%s\"の読み取りに失敗しました: %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "ファイル\"%1$s\"を読み込めませんでした: %3$zuバイトのうち%2$dバイトを読み込みました" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "WALファイル\"%s\"がありませんでした" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "WALファイルが全くありません" + +#: pg_waldump.c:318 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "ファイル\"%s\"が見つかりませんでした: %m" + +#: pg_waldump.c:367 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "ファイル\"%s\"のオフセット%uを読み取れませんでした: %m" + +#: pg_waldump.c:371 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "ファイル%1$s、オフセット%2$uから読み取れませんでした: %4$zu中%3$d" + +#: pg_waldump.c:724 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%sはデバッグのためにPostgreSQLの先行書き込みログをデコードして表示します。\n" +"\n" + +#: pg_waldump.c:726 +#, c-format +msgid "Usage:\n" +msgstr "使用方法:\n" + +#: pg_waldump.c:727 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [オプション] ... [開始セグメント [終了セグメント]]\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"オプション:\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details バックアップブロックに関する詳細情報を出力\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR WAL位置RECPTRで読み込みを停止\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow WALの終端に達してからもリトライを続ける\n" + +#: pg_waldump.c:732 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N 表示するレコード数\n" + +#: pg_waldump.c:733 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=PATH ログセグメントファイルを探すディレクトリ、または\n" +" そのようなファイルを格納している ./pg_walディレクトリ\n" +" (デフォルト: カレントディレクトリ, ./pg_wal,\n" +" $PGDATA/pg_wal)\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet エラー以外何も出力しない\n" + +#: pg_waldump.c:737 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR リソースマネージャーRMGRで生成されたレコードのみを表示\n" +" --rmgr=list で有効なリソースマネージャーの一覧を表示\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR WAL位置RECPTRから読み込みを開始\n" + +#: pg_waldump.c:740 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI ログレコードを読むべきタイムライン\n" +" (デフォルト: 1 またはSTARTSEGで使われた値)\n" + +#: pg_waldump.c:742 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version バージョン情報を表示して終了\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID トランザクションIDがXIDのレコードのみを表示する\n" + +#: pg_waldump.c:744 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=レコード] レコードの代わりに統計情報を表示する\n" +" (オプションで、レコードごとの統計を表示する)\n" + +#: pg_waldump.c:746 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help このヘルプを表示して終了\n" + +#: pg_waldump.c:747 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"バグは<%s>に報告してください。\n" + +#: pg_waldump.c:748 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s ホームページ: <%s>\n" + +#: pg_waldump.c:825 +#, c-format +msgid "no arguments specified" +msgstr "引数が指定されていません" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "WALの終了位置\"%s\"をパースできませんでした" + +#: pg_waldump.c:852 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "表示レコード数の制限値\"%s\"をパースできませんでした" + +#: pg_waldump.c:883 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "リソースマネージャー\"%s\"は存在しません" + +#: pg_waldump.c:892 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "WALの開始位置\"%s\"をパースできませんでした" + +#: pg_waldump.c:902 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "タイムライン\"%s\"をパースできませんでした" + +#: pg_waldump.c:909 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "\"%s\"をトランザクションIDとしてパースできませんでした" + +#: pg_waldump.c:924 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "--statsの引数が認識できません: %s" + +#: pg_waldump.c:937 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "コマンドライン引数が多すぎます (先頭は\"%s\")" + +#: pg_waldump.c:947 pg_waldump.c:967 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "ディレクトリ\"%s\"をオープンできませんでした: %m" + +#: pg_waldump.c:973 pg_waldump.c:1003 +#, c-format +msgid "could not open file \"%s\"" +msgstr "ファイル\"%s\"を開くことができませんでした" + +#: pg_waldump.c:983 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "WALの開始位置%X/%Xはファイル\"%s\"の中ではありません" + +#: pg_waldump.c:1010 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG%sがSTARTSEG %sより前に現れました" + +#: pg_waldump.c:1025 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "WALの終了位置%X/%Xはファイル\"%s\"の中ではありません" + +#: pg_waldump.c:1037 +#, c-format +msgid "no start WAL location given" +msgstr "WALの開始位置が指定されていません" + +#: pg_waldump.c:1051 +#, c-format +msgid "out of memory" +msgstr "メモリ不足" + +#: pg_waldump.c:1057 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "%X/%Xの後に有効なレコードが見つかりませんでした" + +#: pg_waldump.c:1067 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "先頭レコードが%X/%Xの後の%X/%Xの位置にありました。%uバイト分をスキップしています\n" +msgstr[1] "先頭レコードが%X/%Xの後の%X/%Xの位置にありました。%uバイト分をスキップしています\n" + +#: pg_waldump.c:1118 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "WALレコードの%X/%Xでエラー: %s" + +#: pg_waldump.c:1127 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "詳細は\"%s --help\"で確認してください。\n" diff --git a/src/bin/pg_waldump/po/ko.po b/src/bin/pg_waldump/po/ko.po new file mode 100644 index 0000000..3a175f0 --- /dev/null +++ b/src/bin/pg_waldump/po/ko.po @@ -0,0 +1,313 @@ +# LANGUAGE message translation file for pg_waldump +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Ioseph Kim <ioseph@uri.sarang.net>, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 12\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-02-09 20:14+0000\n" +"PO-Revision-Date: 2019-10-31 18:06+0900\n" +"Last-Translator: Ioseph Kim <ioseph@uri.sarang.net>\n" +"Language-Team: Korean <pgsql-kr@postgresql.kr>\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../../src/common/logging.c:188 +#, c-format +msgid "fatal: " +msgstr "심각: " + +#: ../../../src/common/logging.c:195 +#, c-format +msgid "error: " +msgstr "오류: " + +#: ../../../src/common/logging.c:202 +#, c-format +msgid "warning: " +msgstr "경고: " + +#: pg_waldump.c:148 +#, c-format +msgid "could not open file \"%s\": %s" +msgstr "\"%s\" 파일을 열 수 없음: %s" + +#: pg_waldump.c:205 +#, c-format +msgid "" +"WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " +"file \"%s\" header specifies %d byte" +msgid_plural "" +"WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " +"file \"%s\" header specifies %d bytes" +msgstr[0] "" +"WAL 조각 파일 크기는 1MB에서 1GB사이 2^n 이어야하지만, \"%s\" WAL 파일 헤더에" +"는 %d 바이트로 지정되어있습니다" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": %s" +msgstr "\"%s\" 파일을 읽을 수 없음: %s" + +#: pg_waldump.c:216 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%s\" 파일을 읽을 수 없음: %d 읽음, 전체 %zu" + +#: pg_waldump.c:294 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "\"%s\" WAL 파일 찾기 실패" + +#: pg_waldump.c:296 +#, c-format +msgid "could not find any WAL file" +msgstr "어떤 WAL 파일도 찾을 수 없음" + +#: pg_waldump.c:367 +#, c-format +msgid "could not find file \"%s\": %s" +msgstr "\"%s\" 파일을 찾을 수 없음: %s" + +#: pg_waldump.c:382 +#, c-format +msgid "could not seek in log file %s to offset %u: %s" +msgstr "%s 로그 조각 파일에서 %u 위치를 찾을 수 없음: %s" + +#: pg_waldump.c:405 +#, c-format +msgid "could not read from log file %s, offset %u, length %d: %s" +msgstr "%s 로그 조각 파일에서 %u 위치에서 %d 길이를 읽을 수 없음: %s" + +#: pg_waldump.c:408 +#, c-format +msgid "could not read from log file %s, offset %u: read %d of %zu" +msgstr "%s 로그 조각 파일에서 %u 위치에서 읽기 실패: %d / %zu 읽음" + +#: pg_waldump.c:788 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "%s 명령은 디버깅을 위해 PostgreSQL 미리 쓰기 로그(WAL)를 분석합니다.\n" + +#: pg_waldump.c:790 +#, c-format +msgid "Usage:\n" +msgstr "사용법:\n" + +#: pg_waldump.c:791 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [옵션]... [시작파일 [마침파일]]\n" + +#: pg_waldump.c:792 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"옵션들:\n" + +#: pg_waldump.c:793 +#, c-format +msgid "" +" -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details 백업 블록에 대한 자세한 정보도 출력함\n" + +#: pg_waldump.c:794 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR RECPTR WAL 위치에서 읽기 멈춤\n" + +#: pg_waldump.c:795 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow WAL 끝까지 읽은 뒤에도 계속 진행함\n" + +#: pg_waldump.c:796 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N 출력할 레코드 수\n" + +#: pg_waldump.c:797 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/" +"pg_wal)\n" +msgstr "" +" -p, --path=PATH 로그 조각 파일이 있는 디렉터리 지정, 또는\n" +" ./pg_wal 디렉터리가 있는 디렉터리 지정\n" +" (기본값: 현재 디렉터리, ./pg_wal, PGDATA/pg_wal)\n" + +#: pg_waldump.c:800 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager " +"RMGR;\n" +" use --rmgr=list to list valid resource manager " +"names\n" +msgstr "" +" -r, --rmgr=RMGR 리소스 관리자 RMGR에서 만든 레코드만 출력함\n" +" 리소스 관리자 이들을 --rmgr=list 로 봄\n" + +#: pg_waldump.c:802 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR WAL RECPTR 위치에서 읽기 시작\n" + +#: pg_waldump.c:803 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI 읽기 시작할 타임라인 번호\n" +" (기본값: 1 또는 STARTSEG에 사용된 값)\n" + +#: pg_waldump.c:805 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 버전 정보 보여주고 마침\n" + +#: pg_waldump.c:806 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID 트랜잭션 XID 레코드만 출력\n" + +#: pg_waldump.c:807 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] 레크드 통계 정보를 보여줌\n" +" (추가로, 레코드당 통계정보를 출력)\n" + +#: pg_waldump.c:809 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 이 도움말을 보여주고 마침\n" + +#: pg_waldump.c:810 +#, c-format +msgid "" +"\n" +"Report bugs to <pgsql-bugs@lists.postgresql.org>.\n" +msgstr "" +"\n" +"오류보고: <pgsql-bugs@lists.postgresql.org>.\n" + +#: pg_waldump.c:884 +#, c-format +msgid "no arguments specified" +msgstr "인자를 지정하세요" + +#: pg_waldump.c:899 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "\"%s\" 이름의 WAL 위치를 해석할 수 없음" + +#: pg_waldump.c:911 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "\"%s\" 제한을 해석할 수 없음" + +#: pg_waldump.c:939 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "\"%s\" 이름의 리소스 관리자가 없음" + +#: pg_waldump.c:948 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "\"%s\" WAL 위치를 해석할 수 없음" + +#: pg_waldump.c:958 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "\"%s\" 타임라인 번호를 해석할 수 없음" + +#: pg_waldump.c:965 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "\"%s\" 문자열을 트랜잭션 ID로 해석할 수 없음" + +#: pg_waldump.c:980 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "--stats 옵션값이 바르지 않음: %s" + +#: pg_waldump.c:993 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "너무 많은 명령행 인수를 지정했습니다. (처음 \"%s\")" + +#: pg_waldump.c:1003 +#, c-format +msgid "path \"%s\" could not be opened: %s" +msgstr "\"%s\" 경로를 열 수 없음: %s" + +#: pg_waldump.c:1024 +#, c-format +msgid "could not open directory \"%s\": %s" +msgstr "\"%s\" 디렉터리를 열 수 없음: %s" + +#: pg_waldump.c:1031 pg_waldump.c:1062 +#, c-format +msgid "could not open file \"%s\"" +msgstr "\"%s\" 파일을 열 수 없음" + +#: pg_waldump.c:1041 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "%X/%X WAL 시작 위치가 \"%s\" 파일에 없음" + +#: pg_waldump.c:1069 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "%s ENDSEG가 %s STARTSEG 앞에 있음" + +#: pg_waldump.c:1084 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "%X/%X WAL 끝 위치가 \"%s\" 파일에 없음" + +#: pg_waldump.c:1097 +#, c-format +msgid "no start WAL location given" +msgstr "입력한 WAL 위치에서 시작할 수 없음" + +#: pg_waldump.c:1107 +#, c-format +msgid "out of memory" +msgstr "메모리 부족" + +#: pg_waldump.c:1113 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "%X/%X 위치 뒤에 올바른 레코드가 없음" + +#: pg_waldump.c:1124 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "첫 레코드가 %X/%X 뒤에 있고, (%X/%X), %u 바이트 건너 뜀\n" + +#: pg_waldump.c:1175 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "%X/%X 위치에서 WAL 레코드 오류: %s" + +#: pg_waldump.c:1185 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "자제한 사항은 \"%s --help\" 명령으로 살펴보십시오.\n" diff --git a/src/bin/pg_waldump/po/ru.po b/src/bin/pg_waldump/po/ru.po new file mode 100644 index 0000000..6148336 --- /dev/null +++ b/src/bin/pg_waldump/po/ru.po @@ -0,0 +1,363 @@ +# Russian message translation file for pg_waldump +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Alexander Lakhin <a.lakhin@postgrespro.ru>, 2017, 2018, 2019, 2020. +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 10\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2022-05-07 06:06+0300\n" +"PO-Revision-Date: 2020-09-03 15:07+0300\n" +"Last-Translator: Alexander Lakhin <exclusion@gmail.com>\n" +"Language-Team: Russian <pgsql-ru-general@postgresql.org>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "важно: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "ошибка: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "предупреждение: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не удалось открыть файл \"%s\": %m" + +#: pg_waldump.c:202 +#, c-format +msgid "" +"WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " +"file \"%s\" header specifies %d byte" +msgid_plural "" +"WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL " +"file \"%s\" header specifies %d bytes" +msgstr[0] "" +"Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " +"ГБ, но в заголовке файла WAL \"%s\" указано значение: %d" +msgstr[1] "" +"Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " +"ГБ, но в заголовке файла WAL \"%s\" указано значение: %d" +msgstr[2] "" +"Размер сегмента WAL должен задаваться степенью 2 в интервале от 1 МБ до 1 " +"ГБ, но в заголовке файла WAL \"%s\" указано значение: %d" + +#: pg_waldump.c:208 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не удалось прочитать файл \"%s\": %m" + +#: pg_waldump.c:211 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не удалось прочитать файл \"%s\" (прочитано байт: %d из %zu)" + +#: pg_waldump.c:272 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "не удалось найти файл WAL \"%s\"" + +#: pg_waldump.c:274 +#, c-format +msgid "could not find any WAL file" +msgstr "не удалось найти ни одного файла WAL" + +#: pg_waldump.c:315 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "не удалось найти файл \"%s\": %m" + +#: pg_waldump.c:364 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "не удалось прочитать из файла \"%s\" по смещению %u: %m" + +#: pg_waldump.c:368 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "" +"не удалось прочитать из файла %s по смещению %u (прочитано байт: %d из %zu)" + +#: pg_waldump.c:721 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s декодирует и показывает журналы предзаписи PostgreSQL для целей отладки.\n" +"\n" + +#: pg_waldump.c:723 +#, c-format +msgid "Usage:\n" +msgstr "Использование:\n" + +#: pg_waldump.c:724 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [ПАРАМЕТР]... [НАЧАЛЬНЫЙ_СЕГМЕНТ [КОНЕЧНЫЙ_СЕГМЕНТ]]\n" + +#: pg_waldump.c:725 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Параметры:\n" + +#: pg_waldump.c:726 +#, c-format +msgid "" +" -b, --bkp-details output detailed information about backup blocks\n" +msgstr "" +" -b, --bkp-details вывести подробную информацию о копиях страниц\n" + +# well-spelled: ПОЗЗАП +#: pg_waldump.c:727 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr "" +" -e, --end=ПОЗЗАП прекратить чтение в заданной позиции записи в WAL\n" + +#: pg_waldump.c:728 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr "" +" -f, --follow повторять попытки чтения по достижении конца WAL\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N число выводимых записей\n" + +# skip-rule: space-before-period +#: pg_waldump.c:730 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/" +"pg_wal)\n" +msgstr "" +" -p, --path=ПУТЬ каталог, где нужно искать файлы сегментов журнала, " +"или\n" +" каталог с подкаталогом ./pg_wal, содержащим такие " +"файлы\n" +" (по умолчанию: текущий каталог,\n" +" ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:733 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet не выводить никаких сообщений, кроме ошибок\n" + +# well-spelled: МНГР +#: pg_waldump.c:734 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager " +"RMGR;\n" +" use --rmgr=list to list valid resource manager " +"names\n" +msgstr "" +" -r, --rmgr=МНГР выводить записи только менеджера ресурсов МНГР;\n" +" для просмотра списка доступных менеджеров ресурсов\n" +" укажите --rmgr=list\n" + +# well-spelled: ПОЗЗАП +#: pg_waldump.c:736 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr "" +" -s, --start=ПОЗЗАП начать чтение с заданной позиции записи в WAL\n" + +# well-spelled: ЛВР +#: pg_waldump.c:737 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=ЛВР линия времени, записи которой будут прочитаны\n" +" (по умолчанию: 1 или линия, определяемая " +"аргументом\n" +" НАЧАЛЬНЫЙ_СЕГМЕНТ)\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version показать версию и выйти\n" + +#: pg_waldump.c:740 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr "" +" -x, --xid=XID выводить только записи с заданным\n" +" идентификатором транзакции\n" + +#: pg_waldump.c:741 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] показывать статистику вместо записей\n" +" (также возможно получить статистику по записям)\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показать эту справку и выйти\n" + +#: pg_waldump.c:744 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Об ошибках сообщайте по адресу <%s>.\n" + +#: pg_waldump.c:745 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашняя страница %s: <%s>\n" + +#: pg_waldump.c:822 +#, c-format +msgid "no arguments specified" +msgstr "аргументы не указаны" + +#: pg_waldump.c:837 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "не удалось разобрать конечную позицию в WAL \"%s\"" + +#: pg_waldump.c:849 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "не удалось разобрать предел в \"%s\"" + +#: pg_waldump.c:880 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "менеджер ресурсов \"%s\" не существует" + +#: pg_waldump.c:889 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "не удалось разобрать начальную позицию в WAL \"%s\"" + +#: pg_waldump.c:899 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "не удалось разобрать линию времени в \"%s\"" + +#: pg_waldump.c:906 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "не удалось разобрать в \"%s\" идентификатор транзакции" + +#: pg_waldump.c:921 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "нераспознанный аргумент ключа --stats: %s" + +#: pg_waldump.c:934 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "слишком много аргументов командной строки (первый: \"%s\")" + +#: pg_waldump.c:944 pg_waldump.c:964 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не удалось открыть каталог \"%s\": %m" + +#: pg_waldump.c:970 pg_waldump.c:1000 +#, c-format +msgid "could not open file \"%s\"" +msgstr "не удалось открыть файл \"%s\"" + +#: pg_waldump.c:980 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "начальная позиция в WAL %X/%X находится не в файле \"%s\"" + +#: pg_waldump.c:1007 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "КОНЕЧНЫЙ_СЕГМЕНТ %s меньше, чем НАЧАЛЬНЫЙ_СЕГМЕНТ %s" + +#: pg_waldump.c:1022 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "конечная позиция в WAL %X/%X находится не в файле \"%s\"" + +#: pg_waldump.c:1034 +#, c-format +msgid "no start WAL location given" +msgstr "начальная позиция в WAL не задана" + +#: pg_waldump.c:1048 +#, c-format +msgid "out of memory" +msgstr "нехватка памяти" + +#: pg_waldump.c:1054 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "не удалось найти действительную запись после позиции %X/%X" + +#: pg_waldump.c:1064 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "" +"первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б\n" +msgstr[1] "" +"первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б\n" +msgstr[2] "" +"первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б\n" + +#: pg_waldump.c:1115 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "ошибка в записи WAL в позиции %X/%X: %s" + +#: pg_waldump.c:1124 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Для дополнительной информации попробуйте \"%s --help\".\n" + +#~ msgid "could not seek in log file %s to offset %u: %s" +#~ msgstr "не удалось переместиться в файле журнала %s к смещению %u: %s" + +#~ msgid "" +#~ "\n" +#~ "Report bugs to <pgsql-bugs@lists.postgresql.org>.\n" +#~ msgstr "" +#~ "\n" +#~ "Об ошибках сообщайте по адресу <pgsql-bugs@lists.postgresql.org>.\n" + +#~ msgid "path \"%s\" could not be opened: %s" +#~ msgstr "не удалось открыть путь \"%s\": %s" + +#~ msgid "%s: FATAL: " +#~ msgstr "%s: СБОЙ: " + +#~ msgid "not enough data in file \"%s\"" +#~ msgstr "недостаточно данных в файле \"%s\"" diff --git a/src/bin/pg_waldump/po/sv.po b/src/bin/pg_waldump/po/sv.po new file mode 100644 index 0000000..6e926ad --- /dev/null +++ b/src/bin/pg_waldump/po/sv.po @@ -0,0 +1,305 @@ +# Swedish message translation file for pg_waldump +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the PostgreSQL package. +# Dennis Björklund <db@zigo.dhs.org>, 2017, 2018, 2019, 2020, 2021 +# +msgid "" +msgstr "" +"Project-Id-Version: PostgreSQL 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2020-04-11 01:15+0000\n" +"PO-Revision-Date: 2021-11-07 10:37+0100\n" +"Last-Translator: Dennis Björklund <db@zigo.dhs.org>\n" +"Language-Team: Swedish <pgsql-translators@postgresql.org>\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../../../src/common/logging.c:236 +#, c-format +msgid "fatal: " +msgstr "fatalt: " + +#: ../../../src/common/logging.c:243 +#, c-format +msgid "error: " +msgstr "fel: " + +#: ../../../src/common/logging.c:250 +#, c-format +msgid "warning: " +msgstr "varning: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "kunde inte öppna fil \"%s\": %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men headern i WAL-filen \"%s\" anger %d byte" +msgstr[1] "WAL-segmentstorlek måste vara en tvåpotens mellan 1MB och 1GB men headern i WAL-filen \"%s\" anger %d byte" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "kunde inte läsa fil \"%s\": %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "kunde inte läsa fil \"%s\": läste %d av %zu" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "kunde inte lokalisera WAL-fil \"%s\"" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "kunde inte hitta några WAL-filer" + +#: pg_waldump.c:319 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "kunde inte hitta filen \"%s\": %m" + +#: pg_waldump.c:359 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "Kunde inte läsa från fil %s på offset %u: %m" + +#: pg_waldump.c:363 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "kunde inte läsa från fil %s, offset %u, läste %d av %zu" + +#: pg_waldump.c:712 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "%s avkodar och visar PostgreSQLs write-ahead-logg för debuggning.\n" + +#: pg_waldump.c:714 +#, c-format +msgid "Usage:\n" +msgstr "Användning:\n" + +#: pg_waldump.c:715 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [FLAGGA]... [STARTSEG [SLUTSEG]]\n" + +#: pg_waldump.c:716 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Flaggor:\n" + +#: pg_waldump.c:717 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details skriv detaljerad information om backupblock\n" + +#: pg_waldump.c:718 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR stoppa läsning vid WAL-position RECPTR\n" + +#: pg_waldump.c:719 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow fortsätt försök efter att ha nått slutet av WAL\n" + +#: pg_waldump.c:720 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N antal poster att visa\n" + +#: pg_waldump.c:721 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=SÖKVÄG katalog där man hittar loggsegmentfiler eller en\n" +" katalog med en ./pg_wal som innehåller sådana filer\n" +" (standard: aktuell katalog, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:724 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet skriv inte ut några meddelanden förutom fel\n" + +#: pg_waldump.c:725 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR visa bara poster skapade av resurshanteraren RMGR;\n" +" använd --rmgr=list för att lista giltiga resurshanterarnamn\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR börja läsning vid WAL-position RECPTR\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI tidslinje från vilken vi läser loggposter\n" +" (standard: 1 eller värdet som används i STARTSEG)\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version visa versionsinformation, avsluta sedan\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID visa baras poster med transaktions-ID XID\n" + +#: pg_waldump.c:732 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=post] visa statistik istället för poster\n" +" (alternativt, visa statistik per post)\n" + +#: pg_waldump.c:734 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help visa den här hjälpen, avsluta sedan\n" + +#: pg_waldump.c:735 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"Rapportera fel till <%s>.\n" + +#: pg_waldump.c:736 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "hemsida för %s: <%s>\n" + +#: pg_waldump.c:813 +#, c-format +msgid "no arguments specified" +msgstr "inga argument angivna" + +#: pg_waldump.c:828 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "kunde inte parsa slut-WAL-position \"%s\"" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "kunde inte parsa gränsen \"%s\"" + +#: pg_waldump.c:871 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "resurshanterare \"%s\" finns inte" + +#: pg_waldump.c:880 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "kunde inte parsa start-WAL-position \"%s\"" + +#: pg_waldump.c:890 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "kunde inte parsa tidlinjen \"%s\"" + +#: pg_waldump.c:897 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "kunde inte parsa \"%s\" som ett transaktions-ID" + +#: pg_waldump.c:912 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "okänt argument till --stats: %s" + +#: pg_waldump.c:925 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "för många kommandoradsargument (första är \"%s\")" + +#: pg_waldump.c:935 pg_waldump.c:955 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "kunde inte öppna katalog \"%s\": %m" + +#: pg_waldump.c:961 pg_waldump.c:992 +#, c-format +msgid "could not open file \"%s\"" +msgstr "kunde inte öppna filen \"%s\"" + +#: pg_waldump.c:971 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "start-WAL-position %X/%X är inte i filen \"%s\"" + +#: pg_waldump.c:999 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "SLUTSEG %s är före STARTSEG %s" + +#: pg_waldump.c:1014 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "slut-WAL-position %X/%X är inte i filen \"%s\"" + +#: pg_waldump.c:1027 +#, c-format +msgid "no start WAL location given" +msgstr "ingen start-WAL-position angiven" + +#: pg_waldump.c:1037 +#, c-format +msgid "out of memory" +msgstr "slut på minne" + +#: pg_waldump.c:1043 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "kunde inte hitta en giltig post efter %X/%X" + +#: pg_waldump.c:1054 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "första posten efter %X/%X, vid %X/%X, hoppar över %u byte\n" +msgstr[1] "första posten efter %X/%X, vid %X/%X, hoppar över %u byte\n" + +#: pg_waldump.c:1105 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "fel i WAL-post vid %X/%X: %s" + +#: pg_waldump.c:1115 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Försök med \"%s --help\" för mer information.\n" diff --git a/src/bin/pg_waldump/po/tr.po b/src/bin/pg_waldump/po/tr.po new file mode 100644 index 0000000..272dce4 --- /dev/null +++ b/src/bin/pg_waldump/po/tr.po @@ -0,0 +1,306 @@ +# LANGUAGE message translation file for pg_waldump +# Copyright (C) 2017 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_waldump (PostgreSQL) package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2017. +# Abdullah Gülner <agulner@gmail.com>, 2017, 2018, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 10\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2019-04-26 13:46+0000\n" +"PO-Revision-Date: 2021-09-16 09:43+0200\n" +"Last-Translator: Abdullah Gülner\n" +"Language-Team: Turkish <ceviri@postgresql.org.tr>\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" + +#: ../../../src/fe_utils/logging.c:182 +#, c-format +msgid "fatal: " +msgstr "ölümcül (fatal): " + +#: ../../../src/fe_utils/logging.c:189 +#, c-format +msgid "error: " +msgstr "hata: " + +#: ../../../src/fe_utils/logging.c:196 +#, c-format +msgid "warning: " +msgstr "uyarı: " + +#: pg_waldump.c:148 +#, c-format +msgid "could not open file \"%s\": %s" +msgstr "\"%s\" dosyası açılamıyor: %s" + +#: pg_waldump.c:205 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "WAL segment boyutu 1 MB ve 1GB arasında 2 nin üssü bir değer olmalıdır, fakat \"%s\" WAL dosyasının başlığında (header) %d bayt belirtilmektedir" +msgstr[1] "WAL segment boyutu 1 MB ve 1GB arasında 2 nin üssü bir değer olmalıdır, fakat \"%s\" WAL dosyasının başlığında (header) %d bayt belirtilmektedir" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": %s" +msgstr "\"%s\" dosyası okunamadı: %s" + +#: pg_waldump.c:216 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "\"%1$s\" dosyası okuma hatası: %3$zu nun %2$d si okundu" + +#: pg_waldump.c:294 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "\"%s\" WAL dosyasının yeri tespit edilemedi" + +#: pg_waldump.c:296 +#, c-format +msgid "could not find any WAL file" +msgstr "hiç WAL dosyası bulunamadı" + +#: pg_waldump.c:367 +#, c-format +msgid "could not find file \"%s\": %s" +msgstr "\"%s\" dosyası bulunamadı: %s" + +#: pg_waldump.c:382 +#, c-format +msgid "could not seek in log file %s to offset %u: %s" +msgstr "%s log dosyasında aranamadı %u göreli konumuna (pfset) kadar: %s" + +#: pg_waldump.c:405 +#, c-format +msgid "could not read from log file %s, offset %u, length %d: %s" +msgstr "log dosyasından okunamadı %s, göreli konum (offset) %u, uzunluk %d: %s" + +#: pg_waldump.c:408 +#, c-format +msgid "could not read from log file %s, offset %u: read %d of %zu" +msgstr "%1$s log dosyasından okunamadı , göreli konum (offset) %2$u: %4$zu'nin %3$d'si okundu" + +#: pg_waldump.c:787 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s PostgreSQL write-ahead loglarını hata ayıklama için çözer (decode) ve görüntüler.\n" +"\n" + +#: pg_waldump.c:789 +#, c-format +msgid "Usage:\n" +msgstr "Kullanımı:\n" + +#: pg_waldump.c:790 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [SEÇENEK]... [BAŞLAMASEG [BİTİŞSEG]]\n" + +#: pg_waldump.c:791 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Seçenekler:\n" + +#: pg_waldump.c:792 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details yedek blokları hakkında ayrıntılı bilgi görüntüler\n" + +#: pg_waldump.c:793 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR RECPTR WAL konumunda okumayı durdur\n" + +#: pg_waldump.c:794 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow WAL sonuna ulaştıktan sonra denemeye devam et\n" + +#: pg_waldump.c:795 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N görüntülenecek kayıt sayısı\n" + +#: pg_waldump.c:796 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=PATH log segment dosyalarının bulunacağı dizin veya\n" +" öyle dosyaları içeren ./pg_wal'li bir dizin \n" +" (varsayılan: geçerli dizin, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:799 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR sadece RMGR kaynak yöneticisi tarafından oluşturulan kayıtları göster;\n" +" geçerli kaynak yöneticisi adlarını listelemek için --rmgr=list kullanın\n" + +#: pg_waldump.c:801 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR RECPTR WAL konumunda okumayı başlat\n" + +#: pg_waldump.c:802 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI log kayıtlarının okunacağı zaman çizelgesi\n" +" (varsayılan: 1 veya BAŞLAMASEG'de belirtilen değer)\n" + +#: pg_waldump.c:804 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version sürüm bilgisini görüntüle, sonra çık\n" + +#: pg_waldump.c:805 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID sadece XID işlem ID'li kayıtları göster\n" + +#: pg_waldump.c:806 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] kayıtlar yerine istatistikleri göster\n" +" (opsiyonel olarak, kayıt bazında istatistikleri göster)\n" + +#: pg_waldump.c:808 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help bu yardımı göster, sonra çık\n" + +#: pg_waldump.c:868 +#, c-format +msgid "no arguments specified" +msgstr "hiç argüman belirtilmemiş" + +#: pg_waldump.c:883 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "bitiş WAL konumu \"%s\" ayrıştırılamadı" + +#: pg_waldump.c:899 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "\"%s\" limiti ayrıştırılamadı" + +#: pg_waldump.c:927 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "\"%s\" kaynak yöneticisi mevcut değil" + +#: pg_waldump.c:936 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "başlama WAL konumu \"%s\" ayrıştırılamadı" + +#: pg_waldump.c:946 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "\"%s\" zaman çizelgesi ayrıştırılamadı" + +#: pg_waldump.c:957 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "\"%s\" bir işlem (transaction) ID'si olarak ayrıştırılamadı" + +#: pg_waldump.c:972 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "--stats için bilinmeyen argüman: %s" + +#: pg_waldump.c:985 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "çok fazla komut satırı argümanı var (ilki \"%s\")" + +#: pg_waldump.c:995 +#, c-format +msgid "path \"%s\" could not be opened: %s" +msgstr "\"%s\" yolu açılamadı: %s" + +#: pg_waldump.c:1016 +#, c-format +msgid "could not open directory \"%s\": %s" +msgstr "\"%s\" dizini açılamadı: %s" + +#: pg_waldump.c:1023 pg_waldump.c:1054 +#, c-format +msgid "could not open file \"%s\"" +msgstr "\"%s\" dosyası açılamadı" + +#: pg_waldump.c:1033 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "başlama WAL konumu %X/%X \"%s\" dosyası içinde yok" + +#: pg_waldump.c:1061 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "BİTİŞSEG %s BAŞLAMASEG %s den önce" + +#: pg_waldump.c:1076 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "bitiş WAL konumu %X/%X \"%s\" dosyası içinde yok" + +#: pg_waldump.c:1089 +#, c-format +msgid "no start WAL location given" +msgstr "başlama WAL konumu belirtilmemiş" + +#: pg_waldump.c:1099 +#, c-format +msgid "out of memory" +msgstr "yetersiz bellek" + +#: pg_waldump.c:1105 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "%X/%X den sonra geçerli bir kayıt bulunamadı" + +#: pg_waldump.c:1116 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "ilk kayıt %X/%X 'den sonra, %X/%X 'dedir, %u bayt atlanıyor\n" +msgstr[1] "ilk kayıt %X/%X 'den sonra, %X/%X 'dedir, %u bayt atlanıyor\n" + +#: pg_waldump.c:1167 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "%X/%X de WAL kaydında hata: %s" + +#: pg_waldump.c:1177 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Daha fazla bilgi için \"%s --help\" yazın\n" + +#~ msgid "not enough data in file \"%s\"" +#~ msgstr "\"%s\" dosyasında yetersiz veri" + +#~ msgid "%s: FATAL: " +#~ msgstr "%s: KRİTİK (FATAL): " diff --git a/src/bin/pg_waldump/po/uk.po b/src/bin/pg_waldump/po/uk.po new file mode 100644 index 0000000..b760c69 --- /dev/null +++ b/src/bin/pg_waldump/po/uk.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Project-Id-Version: postgresql\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2022-03-16 09:16+0000\n" +"PO-Revision-Date: 2022-06-19 10:10\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: postgresql\n" +"X-Crowdin-Project-ID: 324573\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /REL_14_STABLE/pg_waldump.pot\n" +"X-Crowdin-File-ID: 742\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "збій: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "помилка: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "попередження: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "не можливо відкрити файл \"%s\": %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байт" +msgstr[1] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байти" +msgstr[2] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байтів" +msgstr[3] "Розмір сегмента WAL повинен задаватись ступенем двійки в інтервалі між 1 MB і 1 GB, але у заголовку файлу WAL \"%s\" вказано %d байтів" + +#: pg_waldump.c:208 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "не вдалося прочитати файл \"%s\": %m" + +#: pg_waldump.c:211 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "не вдалося прочитати файл \"%s\": прочитано %d з %zu" + +#: pg_waldump.c:272 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "не вдалося знайти WAL файл \"%s\"" + +#: pg_waldump.c:274 +#, c-format +msgid "could not find any WAL file" +msgstr "не вдалося знайти жодного WAL файлу" + +#: pg_waldump.c:315 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "не вдалося знайти файл \"%s\": %m" + +#: pg_waldump.c:364 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "не вдалося прочитати з файлу %s, зсув %u: %m" + +#: pg_waldump.c:368 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "не вдалося прочитати з файлу %s, зсув %u: прочитано %d з %zu" + +#: pg_waldump.c:721 +#, c-format +msgid "%s decodes and displays PostgreSQL write-ahead logs for debugging.\n\n" +msgstr "%s декодує і відображає журнали попереднього запису PostgreSQL для налагодження.\n\n" + +#: pg_waldump.c:723 +#, c-format +msgid "Usage:\n" +msgstr "Використання:\n" + +#: pg_waldump.c:724 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [OPTION]...[STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:725 +#, c-format +msgid "\n" +"Options:\n" +msgstr "\n" +"Параметри:\n" + +#: pg_waldump.c:726 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details виводити детальну інформацію про блоки резервних копій\n" + +#: pg_waldump.c:727 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR зупинити читання WAL з місця RECPTR\n" + +#: pg_waldump.c:728 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow повторювати спроби після досягнення кінця WAL\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N число записів для відображення\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr " -p, --path=PATH каталог, у якому шукати файли сегментів журналу \n" +"або каталог з ./pg_wal, що містить такі файли (за замовчуванням: чинний каталог, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:733 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet не друкувати жодного виводу, окрім помилок\n" + +#: pg_waldump.c:734 +#, c-format +msgid " -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr " -r, --rmgr=RMGR відображати записи, згенеровані лише ресурсним менеджером RMGR;\n" +" використовувати --rmgr=list для перегляду списку припустимих імен ресурсного менеджера\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR почати читання WAL з місця RECPTR\n" + +#: pg_waldump.c:737 +#, c-format +msgid " -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr " -t, --timeline=TLI часова шкала, записи якої будуть прочитані (за замовчуванням: 1 або значення, що використовується у STARTSEG)\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version вивести інформацію про версію і вийти\n" + +#: pg_waldump.c:740 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID показати записи лише з ідентифікатором транзакцій XID\n" + +#: pg_waldump.c:741 +#, c-format +msgid " -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr " -z, --stats[=record] показати статистику замість записів (необов'язково, відобразити щорядкову статистику)\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help показати цю довідку потім вийти\n" + +#: pg_waldump.c:744 +#, c-format +msgid "\n" +"Report bugs to <%s>.\n" +msgstr "\n" +"Повідомляти про помилки на <%s>.\n" + +#: pg_waldump.c:745 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: pg_waldump.c:822 +#, c-format +msgid "no arguments specified" +msgstr "не вказано аргументів" + +#: pg_waldump.c:837 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "не вдалося проаналізувати кінцеве розташування WAL \"%s\"" + +#: pg_waldump.c:849 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "не вдалося проаналізувати ліміт \"%s\"" + +#: pg_waldump.c:880 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "менеджер ресурсів \"%s\" не існує" + +#: pg_waldump.c:889 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "не вдалося проаналізувати початкове розташування WAL \"%s\"" + +#: pg_waldump.c:899 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "не вдалося проаналізувати часову шкалу \"%s\"" + +#: pg_waldump.c:906 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "не вдалося прочитати \"%s\" як ідентифікатор транзакції" + +#: pg_waldump.c:921 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "нерозпізнаний аргумент для --stats: %s" + +#: pg_waldump.c:934 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "забагато аргументів у командному рядку (перший \"%s\")" + +#: pg_waldump.c:944 pg_waldump.c:964 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "не вдалося відкрити каталог \"%s\": %m" + +#: pg_waldump.c:970 pg_waldump.c:1000 +#, c-format +msgid "could not open file \"%s\"" +msgstr "не вдалося відкрити файл \"%s\"" + +#: pg_waldump.c:980 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "початкове розташування WAL %X/%X не всередині файлу \"%s\"" + +#: pg_waldump.c:1007 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s перед STARTSEG %s" + +#: pg_waldump.c:1022 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "кінцеве розташування WAL %X/%X не всередині файлу \"%s\"" + +#: pg_waldump.c:1034 +#, c-format +msgid "no start WAL location given" +msgstr "не задано початкове розташування WAL" + +#: pg_waldump.c:1048 +#, c-format +msgid "out of memory" +msgstr "недостатньо пам'яті" + +#: pg_waldump.c:1054 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "не вдалося знайти припустимий запис після %X/%X" + +#: pg_waldump.c:1064 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "перший запис після %X/%X, у %X/%X, пропускається %u байт\n" +msgstr[1] "перший запис після %X/%X, у %X/%X, пропускається %u байти\n" +msgstr[2] "перший запис після %X/%X, у %X/%X, пропускається %u байтів\n" +msgstr[3] "перший запис після %X/%X, у %X/%X, пропускається %u байти\n" + +#: pg_waldump.c:1115 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "помилка у записі WAL у %X/%X: %s" + +#: pg_waldump.c:1124 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "Спробуйте \"%s --help\" для додаткової інформації.\n" + diff --git a/src/bin/pg_waldump/po/zh_CN.po b/src/bin/pg_waldump/po/zh_CN.po new file mode 100644 index 0000000..1e115cb --- /dev/null +++ b/src/bin/pg_waldump/po/zh_CN.po @@ -0,0 +1,307 @@ +# LANGUAGE message translation file for pg_waldump +# Copyright (C) 2019 PostgreSQL Global Development Group +# This file is distributed under the same license as the pg_waldump (PostgreSQL) package. +# FIRST AUTHOR <zhangjie2@fujitsu.com>, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: pg_waldump (PostgreSQL) 14\n" +"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n" +"POT-Creation-Date: 2021-08-14 05:46+0000\n" +"PO-Revision-Date: 2020-06-23 18:00+0800\n" +"Last-Translator: Jie Zhang <zhangjie2@fujitsu.com>\n" +"Language-Team: Chinese (Simplified) <zhangjie2@fujitsu.com>\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ../../../src/common/logging.c:259 +#, c-format +msgid "fatal: " +msgstr "致命的: " + +#: ../../../src/common/logging.c:266 +#, c-format +msgid "error: " +msgstr "错误: " + +#: ../../../src/common/logging.c:273 +#, c-format +msgid "warning: " +msgstr "警告: " + +#: pg_waldump.c:146 +#, c-format +msgid "could not open file \"%s\": %m" +msgstr "无法打开文件 \"%s\": %m" + +#: pg_waldump.c:202 +#, c-format +msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte" +msgid_plural "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d bytes" +msgstr[0] "WAL段大小必须是1MB到1GB之间的2次幂,但WAL文件\"%s\"头指定了%d个字节" +msgstr[1] "WAL段大小必须是1MB到1GB之间的2次幂,但WAL文件\"%s\"头指定了%d个字节" + +#: pg_waldump.c:210 +#, c-format +msgid "could not read file \"%s\": %m" +msgstr "无法读取文件 \"%s\": %m" + +#: pg_waldump.c:213 +#, c-format +msgid "could not read file \"%s\": read %d of %zu" +msgstr "无法读取文件\"%1$s\":读取了%3$zu中的%2$d" + +#: pg_waldump.c:275 +#, c-format +msgid "could not locate WAL file \"%s\"" +msgstr "找不到WAL文件\"%s\"" + +#: pg_waldump.c:277 +#, c-format +msgid "could not find any WAL file" +msgstr "找不到任何WAL文件" + +#: pg_waldump.c:318 +#, c-format +msgid "could not find file \"%s\": %m" +msgstr "找不到文件\"%s\": %m" + +#: pg_waldump.c:367 +#, c-format +msgid "could not read from file %s, offset %u: %m" +msgstr "无法从文件 %s读取,偏移量 %u: %m" + +#: pg_waldump.c:371 +#, c-format +msgid "could not read from file %s, offset %u: read %d of %zu" +msgstr "无法从文件%1$s读取,偏移量%2$u,读取%4$zu中的%3$d" + +#: pg_waldump.c:724 +#, c-format +msgid "" +"%s decodes and displays PostgreSQL write-ahead logs for debugging.\n" +"\n" +msgstr "" +"%s 为了调试,解码并显示PostgreSQL预写日志.\n" +"\n" + +#: pg_waldump.c:726 +#, c-format +msgid "Usage:\n" +msgstr "使用方法:\n" + +#: pg_waldump.c:727 +#, c-format +msgid " %s [OPTION]... [STARTSEG [ENDSEG]]\n" +msgstr " %s [选项]... [STARTSEG [ENDSEG]]\n" + +#: pg_waldump.c:728 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"选项:\n" + +#: pg_waldump.c:729 +#, c-format +msgid " -b, --bkp-details output detailed information about backup blocks\n" +msgstr " -b, --bkp-details 输出有关备份块的详细信息\n" + +#: pg_waldump.c:730 +#, c-format +msgid " -e, --end=RECPTR stop reading at WAL location RECPTR\n" +msgstr " -e, --end=RECPTR 在指定的WAL位置停止读取\n" + +#: pg_waldump.c:731 +#, c-format +msgid " -f, --follow keep retrying after reaching end of WAL\n" +msgstr " -f, --follow 在到达可用WAL的末尾之后,继续重试\n" + +#: pg_waldump.c:732 +#, c-format +msgid " -n, --limit=N number of records to display\n" +msgstr " -n, --limit=N 要显示的记录数\n" + +#: pg_waldump.c:733 +#, c-format +msgid "" +" -p, --path=PATH directory in which to find log segment files or a\n" +" directory with a ./pg_wal that contains such files\n" +" (default: current directory, ./pg_wal, $PGDATA/pg_wal)\n" +msgstr "" +" -p, --path=PATH 在其中查找日志段文件的目录\n" +" 或包含此类文件的./pg_wal目录\n" +" (默认值: 当前的目录, ./pg_wal, $PGDATA/pg_wal)\n" + +#: pg_waldump.c:736 +#, c-format +msgid " -q, --quiet do not print any output, except for errors\n" +msgstr " -q, --quiet 不打印任何输出,错误除外\n" + +#: pg_waldump.c:737 +#, c-format +msgid "" +" -r, --rmgr=RMGR only show records generated by resource manager RMGR;\n" +" use --rmgr=list to list valid resource manager names\n" +msgstr "" +" -r, --rmgr=RMGR 只显示由RMGR资源管理器生成的记录\n" +" 使用--rmgr=list列出有效的资源管理器名称\n" + +#: pg_waldump.c:739 +#, c-format +msgid " -s, --start=RECPTR start reading at WAL location RECPTR\n" +msgstr " -s, --start=RECPTR 在WAL中位于RECPTR处开始阅读\n" + +#: pg_waldump.c:740 +#, c-format +msgid "" +" -t, --timeline=TLI timeline from which to read log records\n" +" (default: 1 or the value used in STARTSEG)\n" +msgstr "" +" -t, --timeline=TLI 要从哪个时间线读取日志记录\n" +" (默认值:1或者是使用STARTSEG中的值)\n" + +#: pg_waldump.c:742 +#, c-format +msgid " -V, --version output version information, then exit\n" +msgstr " -V, --version 输出版本信息, 然后退出\n" + +#: pg_waldump.c:743 +#, c-format +msgid " -x, --xid=XID only show records with transaction ID XID\n" +msgstr " -x, --xid=XID 只显示用给定事务ID标记的记录\n" + +#: pg_waldump.c:744 +#, c-format +msgid "" +" -z, --stats[=record] show statistics instead of records\n" +" (optionally, show per-record statistics)\n" +msgstr "" +" -z, --stats[=record] 显示统计信息而不是记录\n" +" (或者,显示每个记录的统计信息)\n" + +#: pg_waldump.c:746 +#, c-format +msgid " -?, --help show this help, then exit\n" +msgstr " -?, --help 显示此帮助, 然后退出\n" + +#: pg_waldump.c:747 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" +"\n" +"臭虫报告至<%s>.\n" + +#: pg_waldump.c:748 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s 主页: <%s>\n" + +#: pg_waldump.c:825 +#, c-format +msgid "no arguments specified" +msgstr "未指定参数" + +#: pg_waldump.c:840 +#, c-format +msgid "could not parse end WAL location \"%s\"" +msgstr "无法解析WAL结束位置\"%s\"" + +#: pg_waldump.c:852 +#, c-format +msgid "could not parse limit \"%s\"" +msgstr "无法解析限制\"%s\"" + +#: pg_waldump.c:883 +#, c-format +msgid "resource manager \"%s\" does not exist" +msgstr "资源管理器\"%s\"不存在" + +#: pg_waldump.c:892 +#, c-format +msgid "could not parse start WAL location \"%s\"" +msgstr "无法解析WAL起始位置\"%s\"" + +#: pg_waldump.c:902 +#, c-format +msgid "could not parse timeline \"%s\"" +msgstr "无法解析时间线\"%s\"" + +#: pg_waldump.c:909 +#, c-format +msgid "could not parse \"%s\" as a transaction ID" +msgstr "无法将\"%s\"解析为事务ID" + +#: pg_waldump.c:924 +#, c-format +msgid "unrecognized argument to --stats: %s" +msgstr "无法识别的参数--stats: %s" + +#: pg_waldump.c:937 +#, c-format +msgid "too many command-line arguments (first is \"%s\")" +msgstr "命令行参数太多 (第一个是 \"%s\")" + +#: pg_waldump.c:947 pg_waldump.c:967 +#, c-format +msgid "could not open directory \"%s\": %m" +msgstr "无法打开目录 \"%s\": %m" + +#: pg_waldump.c:973 pg_waldump.c:1003 +#, c-format +msgid "could not open file \"%s\"" +msgstr "could not open file\"%s\"" + +#: pg_waldump.c:983 +#, c-format +msgid "start WAL location %X/%X is not inside file \"%s\"" +msgstr "WAL开始位置%X/%X不在文件\"%s\"中" + +#: pg_waldump.c:1010 +#, c-format +msgid "ENDSEG %s is before STARTSEG %s" +msgstr "ENDSEG %s在STARTSEG %s之前" + +#: pg_waldump.c:1025 +#, c-format +msgid "end WAL location %X/%X is not inside file \"%s\"" +msgstr "WAL结束位置%X/%X不在文件\"%s\"中" + +#: pg_waldump.c:1037 +#, c-format +msgid "no start WAL location given" +msgstr "未给出WAL起始位置" + +#: pg_waldump.c:1051 +#, c-format +msgid "out of memory" +msgstr "内存不足" + +#: pg_waldump.c:1057 +#, c-format +msgid "could not find a valid record after %X/%X" +msgstr "在%X/%X之后找不到有效记录" + +#: pg_waldump.c:1067 +#, c-format +msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n" +msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n" +msgstr[0] "第一条记录在%X/%X之后,位于%X/%X,跳过了%u个字节\n" +msgstr[1] "第一条记录在%X/%X之后,位于%X/%X,跳过了%u个字节\n" + +#: pg_waldump.c:1118 +#, c-format +msgid "error in WAL record at %X/%X: %s" +msgstr "在WAL记录中的%X/%X处错误为: %s" + +#: pg_waldump.c:1127 +#, c-format +msgid "Try \"%s --help\" for more information.\n" +msgstr "请用 \"%s --help\" 获取更多的信息.\n" diff --git a/src/bin/pg_waldump/rmgrdesc.c b/src/bin/pg_waldump/rmgrdesc.c new file mode 100644 index 0000000..852d8ca --- /dev/null +++ b/src/bin/pg_waldump/rmgrdesc.c @@ -0,0 +1,40 @@ +/* + * rmgrdesc.c + * + * pg_waldump resource managers definition + * + * src/bin/pg_waldump/rmgrdesc.c + */ +#define FRONTEND 1 +#include "postgres.h" + +#include "access/brin_xlog.h" +#include "access/clog.h" +#include "access/commit_ts.h" +#include "access/generic_xlog.h" +#include "access/ginxlog.h" +#include "access/gistxlog.h" +#include "access/hash_xlog.h" +#include "access/heapam_xlog.h" +#include "access/multixact.h" +#include "access/nbtxlog.h" +#include "access/rmgr.h" +#include "access/spgxlog.h" +#include "access/xact.h" +#include "access/xlog_internal.h" +#include "catalog/storage_xlog.h" +#include "commands/dbcommands_xlog.h" +#include "commands/sequence.h" +#include "commands/tablespace.h" +#include "replication/message.h" +#include "replication/origin.h" +#include "rmgrdesc.h" +#include "storage/standbydefs.h" +#include "utils/relmapper.h" + +#define PG_RMGR(symname,name,redo,desc,identify,startup,cleanup,mask) \ + { name, desc, identify}, + +const RmgrDescData RmgrDescTable[RM_MAX_ID + 1] = { +#include "access/rmgrlist.h" +}; diff --git a/src/bin/pg_waldump/rmgrdesc.h b/src/bin/pg_waldump/rmgrdesc.h new file mode 100644 index 0000000..42f8483 --- /dev/null +++ b/src/bin/pg_waldump/rmgrdesc.h @@ -0,0 +1,23 @@ +/* + * rmgrdesc.h + * + * pg_waldump resource managers declaration + * + * src/bin/pg_waldump/rmgrdesc.h + */ +#ifndef RMGRDESC_H +#define RMGRDESC_H + +#include "access/xlogreader.h" +#include "lib/stringinfo.h" + +typedef struct RmgrDescData +{ + const char *rm_name; + void (*rm_desc) (StringInfo buf, XLogReaderState *record); + const char *(*rm_identify) (uint8 info); +} RmgrDescData; + +extern const RmgrDescData RmgrDescTable[]; + +#endif /* RMGRDESC_H */ diff --git a/src/bin/pg_waldump/t/001_basic.pl b/src/bin/pg_waldump/t/001_basic.pl new file mode 100644 index 0000000..fb2f807 --- /dev/null +++ b/src/bin/pg_waldump/t/001_basic.pl @@ -0,0 +1,11 @@ + +# Copyright (c) 2021, PostgreSQL Global Development Group + +use strict; +use warnings; +use TestLib; +use Test::More tests => 8; + +program_help_ok('pg_waldump'); +program_version_ok('pg_waldump'); +program_options_handling_ok('pg_waldump'); |