Установка комментария столбца к тому из другого столбца в Postgresql

Во-первых, (*(str + i)+j) не очень хороший путь.

Вы можете заменить все

(*(str + i) + j)

на:

str[i][j]

Затем вам нужно сбросить max на «а», потому что это «о», когда вы выходите из цикла, поэтому ваше состояние становится str[i][j] >= o, что не то, что вы хотите. Сделайте это до второго for.

И я бы использовал while вместо for для первого цикла.

Я отредактировал ваш код, и эта версия отлично работает для меня:

#include <stdlib.h>


char *bigLetters(char *str[], int size)
{
    char *strNew = (char *)malloc((size + 1) * sizeof(char));
    int i = 0;

    while (i < size) {
        char max = 'a';
        for (int j = 0; str[i][j]; j++) {
            if (str[i][j] >= max) {
                max = str[i][j];
            }
        }
        strNew[i] = max;
        i++;
    }
    strNew[i] = '\0';
    return strNew;
}    

void main()
{
    char *strArr[5] = { "hello", "and", "good", "morning"};
    char *res = bigLetters(strArr, 4);
    printf("The new string is --> %s\n", res);
    return 0;
}
6
задан dland 8 December 2008 в 21:08
поделиться

2 ответа

Следующая вещь знать состоит в том, как получить oid таблицы. Я думаю, что с помощью этого в качестве части комментария не будет работать, как Вы подозреваете.

    postgres=# create table comtest1 (id int, val varchar);
    CREATE TABLE
    postgres=# insert into comtest1 values (1,'a');
    INSERT 0 1
    postgres=# select distinct tableoid from comtest1;
     tableoid
    ----------
        32792
    (1 row)

    postgres=# comment on column comtest1.id is 'Identifier Number One';
    COMMENT
    postgres=# select col_description(32792,1);
        col_description
    -----------------------
     Identifier Number One
    (1 row)

Во всяком случае я сделал на скорую руку быструю функцию plpgsql для копирования комментариев от одной пары таблицы/столбец до другого. Вы имеете к createlang plpgsql на базе данных и используете его как это:

    Copy the comment on the first column of table comtest1 to the id 
    column of the table comtest2. Yes, it should be improved but 
    that's left as work for the reader.

    postgres=# select copy_comment('comtest1',1,'comtest2','id');
     copy_comment
    --------------
                1
    (1 row)
CREATE OR REPLACE FUNCTION copy_comment(varchar,int,varchar,varchar) RETURNS int AS $PROC$
DECLARE
        src_tbl ALIAS FOR $1;
        src_col ALIAS FOR $2;
        dst_tbl ALIAS FOR $3;
        dst_col ALIAS FOR $4;
        row RECORD;
        oid INT;
        comment VARCHAR;
BEGIN
        FOR row IN EXECUTE 'SELECT DISTINCT tableoid FROM ' || quote_ident(src_tbl) LOOP
                oid := row.tableoid;
        END LOOP;

        FOR row IN EXECUTE 'SELECT col_description(' || quote_literal(oid) || ',' || quote_literal(src_col) || ')' LOOP
                comment := row.col_description;
        END LOOP;

        EXECUTE 'COMMENT ON COLUMN ' || quote_ident(dst_tbl) || '.' || quote_ident(dst_col) || ' IS ' || quote_literal(comment);

        RETURN 1;
END;
$PROC$ LANGUAGE plpgsql;
5
ответ дан 17 December 2019 в 02:35
поделиться

Можно получить комментарии к столбцам с помощью системной функции col_description (table_oid, column_number). Посмотрите эту страницу для получения дальнейшей информации.

1
ответ дан 17 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: